Merge pull request #2301 from sonndinh/remove-dup-reactor-functions
[ACE_TAO.git] / ACE / ChangeLogs / ChangeLog-1996b
blob5dd7b809a42b641f20b9c178efd6574093469c81
1 Tue Dec 31 18:27:50 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3         * ace/Log_Msg.cpp (log): Added a test so that if we're
4           (1) not printing to stderr and (2) aborting the program we still
5           print a message to stderr.
7         * ace/Message_Block: Added synchronization support to
8           ACE_Message_Block.  This is necessary now that we've got
9           reference counting to ensure that we don't have race conditions
10           when incrementing and decrementing the reference count in
11           separate threads.  The approach is very clean and uses the new
12           ACE_Lock mechanism to conditionally acquire()/release() the
13           locking strategy if concurrency control is necessary.
15         * ace/Synch_T: Created a new set of ACE_Lock and
16           ACE_Lock_Adapter<> classes which are similar in spirit to the
17           ACE_Allocator and ACE_Allocator_Adapter<> classes.  These make
18           it possible to treat polymorphically synchronization mechanisms
19           in ACE polymorphically, *without* creating an entire new
20           parallel hierarchy of locking mechanisms.
22         * ace/Synch: Added the full suite of acquire_{read|write}() and
23           tryacquire_{read|write}() methods to ACE_Semaphore and
24           ACE_Process_Semaphore so they will be consist with the other
25           synchronization APIs.
27 Tue Dec 31 00:11:56 1996  Douglas C. Schmidt  <schmidt@flamenco.cs.wustl.edu>
29         * Changed all uses of ACE_Event_Handler::RWE_MASK to 
30           ACE_Event_Handler::ALL_EVENTS_MASK to reflect the fact that
31           we will soon have more than READ, WRITE, and EXCEPT events.
32           However, I've kept RWE_MASK around for backwards
33           compatibility.
35         * examples/ASX/Message_Queue: Changed the tests so that they use
36           the new ACE_Message_Block::release() method rather than calling
37           delete explicitly.
39         * apps/Gateway: Revised the implementation of the Gateway and Peer
40           applications to take advantage of the new ACE_Message_Block
41           reference counting scheme.
43 Tue Dec 31 15:06:51 1996  David L. Levine  <levine@cs.wustl.edu>
45         * ace/Task.cpp: added comments that try to explain interaction
46           between ACE_Task_Base::svc_run () and ACE_Task_Exit instance
48         * ace/Hi_Res_Timer.h: added comment to print_total () saying it
49           should only be used for incremental timings; added defaults to
50           a few print_ave/print_total args
52         * ace/Hi_Res_Timer.{i,cpp}: inlined the constructor; trimmed output
53           if count is 1; rounded instead of truncated usecs portion of time
55 Mon Dec 30 15:24:59 1996  Douglas C. Schmidt  <schmidt@flamenco.cs.wustl.edu>
57         * ace/Message_Block: Added reference counting to ACE_Message_Block
58           so that we no longer have to clone() messages when we want to
59           pass them around "by reference."
61         * apps/Gateway/Peer/Peer.cpp (init): The Peer_Acceptor had gotten
62           out of date wrt newer ACE features, so I updated it.
64 Mon Dec 30 15:24:59 1996  Douglas C. Schmidt  <schmidt@flamenco.cs.wustl.edu>
66         * ace/OS.h: Added a special case for ACE_UNUSED_ARG that works
67           with G++.  Thanks to David Levine for this.
69 Mon Dec 30 16:05:11 1996  David L. Levine  <levine@cs.wustl.edu>
71         * ace/OS.cpp (ace_thread_adapter): Updated ACE_TRACE arg
72           names (even though they're currently commented out).
74         * ace/Task.cpp (svc_run): If TSS isn't supported, and on
75           Linux, for now, create the ACE_Task_Exit exit_hook instance
76           on the stack so that it's destructor will be called when
77           svc_run () completes.
79 Sun Dec 29 18:38:03 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
81         * apps/Gateway/Gateway/File_Parser.h: Removed the endofline()
82           method declaration -- it doesn't seem to be defined anywhere.
84         * ace/OS.h: Added an ACE_INT32 to complement the ACE_UINT32.
86         * netsvcs/lib: Cleaned up all the ACE network services by removing
87           their SIGINT signal handler.  This was interferring with the
88           main event loop's ability to shutdown...
90         * apps/Gateway/Gateway: Once again changed the name of
91           *IO_Handler* to *Proxy_Handler* since these things are really
92           proxies, in the COS sense!
94         * ace/Service_Record.cpp: Tidied up the implementation of
95           ACE_Module_Type::fini() so that it doesn't try to call fini() on
96           NULL pointers.  Also, rather than explicitly deleting the reader
97           and writer Tasks, we call ACE_Module<>::close(), which knows how
98           to take care of all this stuff.
100         * ace/Module.cpp: Added an extra parameter to close_i() so that we
101           can correctly pass the value of "flags" from close() in order to
102           prevent deleting tasks when we don't want to do this.
104         * ace/Module.cpp: There was a bug in the open() method
105           since we were potentially deleting reader_q and writer_q twice
106           if memory allocation failed.
108 Sat Dec 28 19:02:13 1996  Douglas C. Schmidt  <schmidt@flamenco.cs.wustl.edu>
110         * ace/ACE.cpp: Changed the implementation of ldfind() so that it
111           doesn't try to add the DLL prefix (e.g., "lib") unless it
112           doesn't match filename.  This is necessary to keep lots
113           of existing svc.conf files from breaking.
115         * ace/Event_Handler.h: Added a new ACCEPT_MASK for use with the
116           new asynchronous accept() operation support for Win32.
118         * ace: Added a new config file for WinNT 4.0 called
119           config-winnt-4.0-msvc4.x.h.  This file contains #defines for new
120           features in WinNT 4.0 such as non-blocking acquire for
121           CRITICALSECTIONs (TryEnterCriticalSection()),
122           SignalObjectAndWait(), and CancelIO().  Oddly enough, these
123           functions seem to be missing from the MSVC++ 4.2 #include files,
124           so I added them to the config file.
126         * ace: Changed the name of config-win32-msvc4.0.h to
127           config-win32-msvc4.x.h since this config file works for MSVC++
128           4.0, 4.1, and 4.2.
130         * ace/Proactor: Added a new "cancel_io" method on the Proactor.
131           This makes it possible to cancel all I/O that is outstanding on
132           a thread.  Thanks to Tim for help with this.
134 Sat Dec 28 23:49:09 1996  Tim H. Harrison  <harrison@lambada.cs.wustl.edu>
136         * ace/ReactorEx.h: Fixed some bugs with ACE_ReactorEx::dispatch.
137           For instance, the index should only be incremented when handlers
138           are dispatched.
140         * ace/OS.i: Fixed some typos regarding the ACE_cond_t for NT.
142         * examples/Reactor/Proactor/test_proactor.cpp: Dr. Schmidt and I
143           hacked this to be way cool.  In particular, we no longer
144           have to know the size of the files to be transferred in
145           advance.  This scheme uses a clever protocol that shuts down 
146           the Peer Handler when (1) all input from the file has arrived,
147           (2) all output to the remote peer handler has been sent, and (3)
148           all input from the remote peer handler has been received.
149           The Peer Handler now uses calls close_writer on the stream
150           to notify the remote peer when its done writing.  The Input
151           File Handler sends an mb==0 to tell the Peer Handler when
152           it's done reading from the file.  The Peer Handle uses a
153           state variable to OR in all the different conditions for
154           exiting.  It works.
156 Fri Dec 27 23:39:19 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
158         * ace/Stream.cpp (pop): Modified the code so that we don't delete
159           the Module we are popping unless the flags request this.
161         * ace/Service_Record.cpp (fini): Always make sure to first fini()
162           each Module, then remove() (and delete) them.
164         * ace/Stream.cpp (remove): Updated the code so that we don't
165           delete the Module unless the flags request this.
167 Thu Dec 26 18:51:22 1996  David L. Levine  <levine@cs.wustl.edu>
169         * ace/config-linux-lxpthreads.h: Has James CE Johnson's
170           latest adjustments to this config file.
172 Tue Dec 24 10:55:20 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
174         * ace/OS.cpp (ace_thread_adapter): Changed the message that is
175           printed if we exit the thread.  Thanks to Luca for this
176           suggestion.
178 Tue Dec 24 15:38:43 1996  David L. Levine  <levine@cs.wustl.edu>
180         * ace/OS.i (cond_destroy): added call to event_destroy ()
181           for waiters_done_ on WTHREADS platforms
183         * ace/Future.cpp: added specialization of
184           template class ACE_Atomic_Op<ACE_Thread_Mutex, int>;
185           so that libACE is self-contained with respect to template
186           instantiations (with g++, for example)
188         * ace/Malloc.cpp: added specialization of
189           template class ACE_Atomic_Op<ACE_PROCESS_MUTEX, int>;
190           so that libACE is self-contained with respect to template
191           instantiations (with g++, for example)
193         * examples/Reactor/Misc/test_reactors.cpp,
194           examples/Threads/future1.cpp, examples/Threads/future2.cpp,
195           examples/Threads/manual_event.cpp, examples/Threads/task_two.cpp,
196           performance-tests/Synch-Benchmarks/Benchmark.cpp,
197           tests/Future_Test.cpp, tests/Reactors_Test.cpp: instantiate
198           ACE_Atomic_Op with int instead of u_long so that it can use
199           the specialization in libACE
201 Tue Dec 24 12:49:21 1996  David L. Levine  <levine@cs.wustl.edu>
203         * ace/OS.h (struct siginfo_t): added declaration of
204           siginfo_t (ACE_HANDLE *handles) to match definition in
205           OS.cpp.  Thanks to James Johnson for pointing this out.
207         * ace/OS.cpp (thr_create): fixed position of
208           #endif /* !ACE_LACKS_THREAD_STACK_SIZE */ directive, it
209           needed to be before the closing '}' of the block.  Thanks to
210           James Johnson for pointing this out, also.
212         * ace/OS.cpp: don't include ace/ARGV.h except on WIN32 because
213           it's only needed there, and don't compile ACE_Thread_Adapter on
214           VxWorks to save space
216         * apps/Gateway/Peer/Gateway_Handler.h:  changed #include "Event.h"
217           to be #include "Peer_Message.h" so that Peer_Header::ROUTING_ID
218           can be referenced in the class declaration.  This subproject
219           still doesn't build, though; I think that Event.h is needed.
221         * ace/OS.h (struct ACE_cond_t): declare waiters_done_ as
222           ACE_sema_t on VxWorks only, to avoid recursive struct
223           definition with ACE_event_t
225         * ace/OS.i (ACE_OS::cond_*): on VxWorks only, use sema
226           operations on ACE_cond_t::waiters_done_ instead of event ops
228 Tue Dec 24 10:55:20 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
230         * examples/Threads/task_three.cpp (main): Changed the use of
231           new-style C++ casts for ACE_Sig_Action to old-style C casts so
232           that more picky compilers like GCC won't complain.  Thanks to
233           Sandro Doro <alex@aureus.sublink.org> for reporting this.
235         * examples/Threads/task_two.cpp: Fixed a typo where int should be
236           used as the type for ACE_Atomic_Op rather than u_long.  Thanks
237           to David Levine for noticing this.
239         * ace/OS.i: Generalized the implementation of ACE_OS::cond_wait()
240           so that it will work with Win32 and VxWorks.  Thanks to David
241           Levine for pointing this out.
243         * ace/Synch_T.cpp: Removed ACE_Process_Condition since it isn't
244           really feasible to implement this as a template.  At some point,
245           it should be reimplemnted as a non-template that is only
246           guaranteed to work on Solaris and some POSIX pthreads platforms.
248 Sun Dec 22 21:23:57 1996  David L. Levine  <levine@cs.wustl.edu>
250         * ace/Acceptor.cpp: replaced two statements that looked like this:
251           "ptr && ptr->foo ()"  with "if (ptr) ptr-> foo()" to prevent
252           compiler warnings about computed values that aren't used
254         * netsvcs/clients/Tokens/manual/manual.cpp: added explicit "int"
255           return type to declaration of handle_exception (ACE_HANDLE) so
256           that compilers don't complain about no type
258         * ASX/Event_Server/Event_Server/Options.cpp,
259           ASX/UPIPE_Event_Server/Options.cpp: rearranged initializers
260           in Options ctor to match declaration order
262 Sun Dec 22 21:16:23 1996  Douglas C. Schmidt  <schmidt@mambo.cs.wustl.edu>
264         * ace/OS.cpp (thr_create): added a new ACE_HAS_PTHREADS_XAVIER to
265           deal with the sparam.sched_priority features of the Linux
266           pthreads implementation.  Thanks to James Johnson for this.
268         * ace/OS.i (thr_setprio): I forgot to define int policy = 0;
270         * ace/SV_Semaphore_Simple.i: Removed the frigging LUSED macro and
271           updated the ACE_SV_Semaphore_Simple::name_2_key() method to
272           consider *all* the characters in the name.  This will help avoid
273           nasty bugs when different lock names have a common prefix.
275         * ace/Local_Name_Space_T.cpp (ACE_Local_Name_Space): Added a call
276           to "delete this->lock_" since we now allocate it dynamically.
278         * apps/Gateway/Gateway/gatewayd.cpp: Changed call to
279           ACE_SVC_INVOKE from ACE_Gateway to Gateway.
281         * ace/OS.i: In function thr_sigsetmask changed the line:
283           #if defined (ACE_HAS_IRIX62_THREADS) 
285           to 
287           #if defined (ACE_HAS_IRIX62_THREADS) || defined (ACE_HAS_PTHREADS_XAVIER)
289           Thanks to James CE Johnson <jcej@lads.com> for this.
291         * ace/config-linux-[lx]pthreads.h: Added a #define for the
292           ACE_HAS_THREAD_SPECIFIC_STORAGE symbol.  Thanks to James CE
293           Johnson <jcej@lads.com> for this.
295         * ace: created a new config file called config-linux-lxpthreads.h.
296           This contains the ACE #defines necessary to use L. Xavier's
297           threading package on Linux.  Thanks to James CE Johnson
298           <jcej@lads.com> for this.
300         * build/gcc/ace/Synch: Moved the definition of the ACE_*Event
301           classes *outside* of ACE_HAS_THREADS so that the Proactor will
302           compile correctly even when there's no threading defined.
304         * ace/config-linux-pthread.h: Added #define ACE_MT_SAFE, which
305           seems to have been missing.  Thanks to James Johnson for
306           suggesting this.
308         * tests/TSS_Test.cpp: Now that we've got Chris Lahey's fixes for
309           AIX we can run this test on AIX.
311         * ace/OS.cpp (thr_create): Added a #ifdef for
312           pthread_attr_setstacksize() for Linux pthreads, which doesn't
313           seem to support this.  Thanks to James CE Johnson
314           <jcej@lads.com> for this fix.
316         * ace/OS.i: Added DCE pthreads fixes for OSF/1 3.2.  Thanks to
317           Harry Gunnarsson <hg@carmenta.se> for these.
319 Sat Dec 21 13:54:45 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
321         * ace/Synch_T: Integrated a solution that will allow MVS to use
322           ACE_TSS.  The problem is that the MVS C++ compiler requires an
323           extern "C" destructor function for pthread_key_delete and the
324           ACE_TSS stuff uses a paramatized C++ destructor function
325           (ACE_TSS<TYPE>::cleanup).  To solve this, a new class
326           (ACE_TSS_Adapter) was created that encapsulates a thread
327           specific object and it's associated C++ destructor.  The ACE_TSS
328           methods were then modified so that they provide access to the
329           thread specific object through the ACE_TSS_Adapter.  Also added
330           a generic extern "C" cleanup routine that takes an
331           ACE_TSS_Adapter as an argument. It then calls the adapters
332           cleanup method passing it the saved address of the thread
333           specific object.  Thanks to Chuck Gehr <gehr@sweng.stortek.com>
334           for all of this.
336         * ace/OS: Updated the code so that it will work with MFC and
337           AfxBeginThread().  Thanks to Detlef for these changes.
339         * ace/README: Added two new #defines for ACE_LACKS_COND_T and
340           ACE_LACKS_RWLOCK_T to make it possible to define these in a
341           fine-grained manner for various platforms.
343         * ace/OS.h: Restructured the ACE_HAS_THREADS section so that we
344           factor out the code for ACE_cond_t and ACE_rwlock_t so that it
345           is only defined if we don't support these features natively.
347         * ace/ReactorEx: Added a new "alertable" parameter to the
348           handle_events() method.  If alertable is true, then
349           WaitForMultipleObjectsEx is used as the demultiplexing call,
350           otherwise WaitForMultipleObjects is used.
352         * ace/Signal.cpp: Had to move a few things around so that the code
353           would compile for HP/UX.  Thanks to Neil B. Cohen
354           <nbc@metsci.com> for reporting this.
356         * ace/Acceptor.cpp: Updated the handle_close() method so that the
357           Acceptor shuts down the listen socket and prevents handle leaks.
358           Thanks to Irfan for reporting this.
360 Thu Dec 19th 03:48:26 1996  Irfan Pyarali  <irfan@flamenco.cs.wustl.edu>
362         * ace/Local_Name_Space_T.cpp: Made sure that the mutexes are
363           getting named properly (both the mutex owned by the
364           Local_Name_space and the lock owned by the backing
365           store). For the time being I named these two to be the
366           extensions of the backing store file name.
368         * ace/Local_Name_Space_T.cpp: Replaced the create_manager code
369           such that we use the double check pattern. This is simpiler
370           and easy to understand compared to the current code.
372         * ace/Naming_Context.cpp: Gave the database name a default value.
374         * ace/Malloc_T.cpp: The lock_name should never be 0. This will
375           cause all instances of the same pool to get different
376           mutexes. 
378 Sat Dec 21 09:43:35 1996  David L. Levine  <levine@cs.wustl.edu>
380         * ace/OS.{h,i}: fixes for VxWorks introduced in 4.1, and for
381           inlining: moved #include of OS.i after #defines but before
382           other ace #includes
384 Thu Dec 19 15:58:09 1996  David L. Levine  <levine@cs.wustl.edu>
386         * ace/config-vxworks*.h, include/makeinclude/platform_vxworks*.GNU:
387           enable inlining on VxWorks by default
389 Wed Dec 18 16:44:47 1996  Tim H. Harrison  <harrison@lambada.cs.wustl.edu>
391         * ace/Proactor.cpp (dispatch): Changed this method to take an
392           int error parameter to set errno just before dispatching.
393           This allows us to better propagate overlapped I/O errors to the
394           handlers.
396 Wed Dec 18 16:21:36 1996  David L. Levine  <levine@cs.wustl.edu>
398         * ace/OS.{h,i} and ace/INET_Addr.cpp:  more VxWorks
399           gethostbyname () tweaks
401 Wed Dec 18 15:24:13 1996  Tim H. Harrison  <harrison@lambada.cs.wustl.edu>
403         * ace/Proactor.cpp (ACE_Proactor): Initialize completion_port_ to
404           0.  This is the only way that CreateIoCompletionPort works
405           first time in.  ACE_INVALID_HANDLE makes it break.
407         * (ACE_Proactor): Added a call to CreateIoCompletionPort in the
408           constructor so that GetQueuedCompletionStatus can be called
409           before ACE_Proactor::initiate is called.  This is necessary if
410           an application is using the Proactor as a timer mechanism only.
412 Tue Dec 18 7:58:07 1996  Tim H. Harrison  <harrison@lambada.cs.wustl.edu>
414         * ace/Proactor.i (get_handle): Changed this to return
415           ACE_INVALID_HANDLE on non Win32 platforms.  Also changed
416           shared_event_ from an ACE_Manual_Event to an ACE_Auto_Event.
417           This allows us to remove the call to reset from handle_signal.
419         * examples/Reactor/Proactor/test_timeout.cpp:  Added a new example
420           application to the Proactor example suite.  Check the README for
421           more details.
423         * examples/Reactor/ReactorEx/test_timeout.cpp:  Added a new example
424           application to the ReactorEx example suite.  Check the README for
425           more details.
427         * ace/Service_Config.cpp:  Fixed a bug in run_reactorEx_event_loop
428           (ACE_Time_Value &) so that it doesn't return on timeout.
430 Tue Dec 18 7:06:32 1996    <harrison@samba.cs.wustl.edu>
432         * ace/Proactor.cpp (handle_events): Once again removed the
433           timer_skew_ code.  Changed the ACE_HANDLE global_handle_ to
434           ACE_Manual_Event shared_event_.  Added a constructor that takes
435           an ACE_Timer_Queue *.  Changed the implementation to use an
436           ACE_OS::sleep if only timers are registered.  We need to figure
437           out a better approach than the sleep.
439         * ace/Service_Config.cpp (run_proactor_event_loop): Changed this
440           to only return when an error occurs.  If handle_events returns a
441           0, then a timeout occurred, and we can continue to dispatch
442           events.  We only return when all of the time has expired.
444         * ace/Registry_Name_Space.h (ACE_Registry_Name_Space): Moved the
445           include statements below the ACE_WIN32 and UNICODE directives.
447         * ace/OS.h (siginfo_t): Added siginfo_t (ACE_HANDLE *handle)
448           constructor prototype.
450 Wed Dec 18 06:37:22 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
452         * ace/OS.i (cond_wait): Added the new algorithm for condition
453           variable emulation on Win32. (and VxWorks).  This should fix the
454           nasty problems we had with earlier version (which weren't
455           "fair").  Thanks to James Mansion, Karlheinz, Detlef, and Irfan
456           for helping with this.
458         * ace/Registry.h: Removed the "ACE_TURN_NOMINMAX_OFF" stuff
459           in order to simplify the code.  Thanks to Irfan for this.
461         * ace/OS.i (sema_post): Added a new overloaded version of
462           ACE_OS::sema_post(), which takes a "release count."  This is the
463           number of times to release the semaphore.  Note that Win32
464           supports this natively, whereas on POSIX we need to loop...
466         * ace/Proactor.cpp (handle_events): Changed the Proactor logic so
467           that it will correctly propagate any errors that occur to the
468           handle_{input,output}_complete callback.
470 Tue Dec 17 20:56:56 1996  David L. Levine  <levine@cs.wustl.edu>
472         * ace/OS.{h,i}: on VxWorks: implemented ACE_OS::gethostbyname (),
473           and fixed inet_ntoa () to return -1 on failure
475         * ace/OS.cpp: in ::spa () for VxWorks, zero out unused argv[]
476           slots to overwrite args from previous invocations OS.cpp
478 Tue Dec 17 04:27:07 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
480         * ace/ReactorEx: Added a new feature to the ReactorEx.  If we
481           enable the wait_all flag when calling
482           ACE_ReactorEx::handle_events() *and* we give an
483           ACE_Event_Handler (this is a new final param to the call) then
484           the handle_signal() call will be invoked on this
485           "wait_all_callback" object when all the handles become signaled.
486           Moreover, we pass in the array of signaled handled to through
487           the siginfo_t parameter (see the following ChangeLog entry for
488           details).  If there is no wait_all_callback param, then all the
489           handle_signal() methods are invoked on all the handles.
491         * ace/OS.h (siginfo_t): Augmented the siginfo_t interface so that
492           we can pass an array of signaled Win32 HANDLEs, in addition to
493           just a single HANDLE.  This is used in the ReactorEx.
495         * examples/Reactor/ReactorEx/test_reactorEx.cpp: Added a number of
496           enhancements to this test program based on discussions with
497           Irfan, Karlheinz, Dieter, and Detlef.
499         * ace/Task_T.i (msg_queue): If we override the existing definition
500           of the Message_Queue in an ACE_Task then we need to delete the
501           existing Message_queue (if necessary and mark the Message_Queue
502           as no longer being a candidate for deletion (since we have
503           supplied our own definition).  Irfan had added this earlier, but
504           it seemed to get lost...
506         * examples/Reactor/Proactor/test_proactor.cpp: The class called
507           STDIN_HANDLEr is misnamed since we don't read from stdin, we
508           read from a file.  Therefore, I've changed this to be
509           Input_File_Handler.
511         * examples/Reactor/ReactorEx/test_{proactor,reactorEx}.cpp:
512           Changed misspellings of transfered to transferred.
514         * ace/Memory_Pool.cpp (ACE_MMAP_Memory_Pool): Since NT doesn't support
515           SIGSEGV thre's no point in even trying to register for this
516           signal!
518         * ace/OS.i: Reverted some lost UNICODE fixes -- thanks to Irfan
519           for finding these.
521         * ace/Local_Name_Space_T.cpp (create_manager_i): Removed a
522           debug statement since it may be causing problems with printing
523           UNICODE.
525 Mon Dec 16 11:25:55 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
527         * ace/OS.i (cuserid): Fixed the definition to ACE_OS::cuserid() so
528           that it uses LPTSTR.  Thanks to Irfan for this fix.
530         * ace/Task.cpp (activate): In ACE_Task::activate() there is a possibility to actually 
531           "reactivate" the task using the <force_activate> flag. The following 
532           illustrates that ability:
533      
534           if (this->thr_count_ > 0 && force_active == 0)
535             return 1; // Already active.
536           else
537             this->thr_count_ = n_threads; 
538      
539          The thing is that, when the task is running and we reactivate it 
540          (actually we add threads) the command should be:
541      
542          this->thr_count_ +=  n_threads; 
543      
544          rather than
545      
546          this->thr_count_ = n_threads;
547      
548          That way <this->thr_count_> holds the new number of threads currently 
549          associated with the task.  Thanks to Hamual for this fix.
551         * ace/OS.i (inet_aton): Placed the return 1 within the curly
552           braces to make the HP/UX compiler happy.  Thanks to Kenny Want
553           for reporting this.
555 Mon Dec 16 12:56:43 1996  David L. Levine  <levine@cs.wustl.edu>
557         * ace/OS.i: removed spurious "*/" after an #endif.  Thanks to
558           Harry Gunnarsson <hg@carmenta.se> for reporting this.
560         * ace/Svc_Conf_l.cpp: #ifdef'ed out ace_yyunput () and
561           ace_yy_{push,pop,top}_state () because they're not used,
562           and commented out a few "break"s after "return"s in switch
563           statements to prevent compiler warnings.
565         * ace/Typed_SV_Message.i: reordered initializations in ctor to 
566           match declaration order.
568         * examples/Threads/Makefile, performance-tests/Misc/Makefile,
569           tests/Makefile:
570           Removed "LIBS += -lm" from these Makefiles because it doesn't
571           appear to be necessary, and not all platforms have a libm.
573         * include/makeinclude/platform_sunos4_g++.GNU, platform_sunos5_g++.GNU,
574           platform_sunos5_x86_g++.GNU, platform_unixware_g++.GNU:
575           added -lm to LIBS because it was removed from the Makefiles, and
576           it's needed with g++.
578         * netsvcs/lib/Makefile: removed /pkg/gnu/lib dependencies.  Thanks
579           to Per Andersson <Per.Andersson@hfera.ericsson.se> for pointing
580           this out.
582         * netsvcs/servers/svc.conf: changed _make_ACE_Logger() to
583           _make_ACE_Logging_Strategy() svc.conf.  Thanks to Per Andersson
584           <Per.Andersson@hfera.ericsson.se> for reporting this.
586 Sun Dec 15 13:01:17 1996  David L. Levine  <levine@cs.wustl.edu>
588         * ace/Naming_Context.cpp: reordered initializations in default ctor
589           to match declaration order.
591         * ace/Svc_Conf_y.cpp: added parens to a couple of combined
592           assignments/conditionals to avoid compiler warnings.
594         * include/makeinclude/platform_sunos5_sunc++*.GNU: reverted
595           SOLINK step back to creating real .so files, because it
596           seems to be necessary, sometimes, for template instantiation.
598         * netsvcs/lib/Server_Logging_Handler.cpp: removed ACE_INLINE's.
600         * tests/MM_Shared_Memory_Test.cpp: declare shm_key as char[]
601           instead of char *, so that the string gets put into the data
602           segment rather than the text segment.  The string gets modified,
603           which causes a core dump with the g++/SunOS5.5 build if the string
604           is in the text segment.
606 Sun Dec 15 10:29:20 1996  Douglas C. Schmidt  <schmidt@flamenco.cs.wustl.edu>
608         * netsvcs/servers/svc.conf: Removed the "lib" prefix for the
609           netsvcs DLL.  This is now added automatically by the
610           ACE::ldfind() operation.
612         * ace/SString.cpp (ACE_CString): Removed the #pragmas for Win32.
613           They aren't necessary since we should replace the ACE_USHORT16
614           cast with a char cast.  Thanks to Amos Shapira <amos@dsi.co.il>
615           for reporting this.
617 Sat Dec 14 14:25:38 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
619         * build/SunOS5.5/tests/UPIPE_SAP_Test.cpp (main): Fixed several
620           minor bugs with UPIPE_SAP_Test.cpp.
622         * ace/OS.i (thr_join): Added implementations for Solaris threads
623           and most versions of POSIX pthreads where ACE_hthread_t and
624           ACE_thread_t are the same type!
626         * ace/OS: Began adding hooks so that we can eventually move away
627           from the current split between ACE_thread_t and ACE_hthread_t
628           and unify them via ACE_Thread_ID.
630         * ace/{OS,Thread}.h: Changed the interface of thr_getprio() so
631           that it takes an int & rather than an int *.
633         * ace/OS.i (thr_getprio): Fixed a minor bug for Win32 where we
634           weren't depositing the thread priority into the return value!
636         * Makefile: Changed the order in which things are built so that
637           netsvcs are built right after libACE, followed by the tests.
639 Sat Dec 14 11:54:22 1996  Douglas C. Schmidt  <schmidt@flamenco.cs.wustl.edu>
641         * apps/Gateway/Gateway/Consumer_Map: Change the Consumer_Map class
642           so that it was no longer templatized.  There isn't any point in
643           doing this since we aren't going to be changing these types for
644           this application.
646         * apps/Gateway/Gateway: Factored out the code for selecting the
647           concurrency strategy into a separate *.h file called
648           Concurrency_Strategy.h.
650         * apps/Gateway/Gateway: Began revising the Gateway application to
651           use the new ACE Event Channel.
653         * ace/Svc_Handler: Now that we've got put() and svc() with no-op
654           defaults in class ACE_Task_Base, we don't need them in
655           ACE_Svc_Handler anymore, so I removed them!
657         * ace/Task: Finally got sick of having to provide no-op
658           open()/put()/close() routines in all ACE_Task subclasses, so I
659           changed these methods from pure virtual to virtual with default
660           no-op behavior.  Updated all the tests, as well.
662 Sat Dec 14 11:39:15 1996  David L. Levine  <levine@cs.wustl.edu>
664         * ace/{Module,Stream,Svc_Handler,Synch_T,Task_T}.cpp and Synch_T.i:
665           removed ACE_INLINE qualifier from functions in .cpp files; in
666           the case of Synch_T, moved ACE_INLINE functions from .cpp to .i file
668         * apps/Gateway/Gateway/Routing_Table.cpp,
669           examples/ASX/Event_Server/Event_Server/Peer_Router.cpp,
670           examples/ASX/UPIPE_Event_Server/Peer_Router.cpp:
671           removed ACE_INLINEs from .cpp files
673         * ace/CORBA_Handler.h and ace/Token_Collection.{h,cpp}:
674           changed __INLINE__ to __ACE_INLINE__
676         * ace/Svc_Conf_y.cpp:  commented out unused arguments to
677           suppress compiler complaints
679 Fri Dec 13 22:07:11 1996  David L. Levine  <levine@cs.wustl.edu>
681         * include/makeinclude/platform_sunos5_sunc++*.GNU: replaced
682           SOLINK step in build of shared objects for SunOS5 with SunC++
683           with symlink from .so to .o file.
685         * ace/config-vxworks*.h: added ACE_NEEDS_SYSTIME_H to VxWorks
686           configs because it's needed with inlining
688         * include/makeinclude/platform_vxworks*.GNU: cleaned up VxWorks
689           config files
691 Fri Dec 13 00:53:34 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
693         * ace: Replaced all uses of 
694         
695           #if defined (.....) // ....
696           
697           with
698           
699           #if defined (.....) /* ... */
701           so that broken C++ compilers won't complain.  Thanks to
702           John Cosby <John.D.Cosby@cpmx.saic.com> for reporting this.
704         * ace/Thread.i: Updated the signature of getprio() and setprio()
705           so that they take ACE_hthread_t.  Thanks to Wayne Vucenic
706           <wvucenic@netgate.net> for finding this.
708         * Reran all the tests on NT and Solaris.  Everything seems to
709           work.  Therefore, incremented the version number to 4.1 and put
710           it out for ftp and http.
712 Thu Dec 12 18:51:04 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
714         * tests/Priority_Task_Test.cpp (svc): Added a new test to exercise
715           the new "priority" feature of ACE_OS::thr_create()
716           (which is also available to ACE_Task).
718         * ace/Thread: Added getprio() and setprio() methods to ACE_Thread.
720 Fri Dec 13 13:44:12 1996  David L. Levine  <levine@cs.wustl.edu>
722         * ace/config-vxworks*.h: added ACE_NEEDS_SYSTIME_H to VxWorks
723           configs because it's needed with inlining
725         * include/makeinclude/platform_vxworks*.GNU: cleaned up VxWorks
726           config files
728 Thu Dec 12 18:51:04 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
730         * ace: Added a new macro called ACE_UNUSED_ARG() to keep 
731           the compiler from outputting warnings about unused
732           arguments.  So far, this is mostly done for Win32, but it
733           should be easy to do it for other compilers.  Thanks
734           to Matthias for these changes.
736         * ace/OS.cpp: Added support so that thread priorities will
737           automatically be set when we spawn threads using
738           ACE_OS::thr_create().
740         * ace/OS.cpp: Simplified the logic for handling NULL thr_handles
741           and thr_ids.  Now, we set all this stuff in one place at the
742           beginning of the function, rather than recomputing it all over
743           the place.
745         * ace/config-aix-{3.2.5,4.1.x}.h: Added the
746           ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS flag.
748         * ace/Thread_Manager.cpp (ACE_Thread_Control): Conditionally
749           compiled the logic for calling this->exit() in the destructor
750           for ACE_Thread_Control so that we only make this call if
751           ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS is *not* set.  This will
752           prevent infinite recursion on platforms like AIX.  Thanks to
753           Chris Lahey for reporting this.
755         * apps/Gateway/Gateway/Channel.cpp (recv_peer): Added the logic
756           that makes sure we don't get screwed up by partial headers.
757           Thanks to Chris Cleeland for this.
759 Thu Dec 12 20:55:02 1996  David L. Levine  <levine@cs.wustl.edu>
761         * include/makeinclude/platform_sunos5_sunc++*.GNU: removed
762           SOLINK step in build of shared objects for SunOS5 with SunC++:
763           it's not necessary.
765 Thu Dec 12 03:48:26 1996  Irfan Pyarali  <irfan@flamenco.cs.wustl.edu>
767         * ace/Naming_Context: Modified ACE_Naming such that on Win32, you
768           can use ACE_Registry_Name_Space.
769         
770         * ace/Registry_Name_Space: ACE_Registry_Name_Space is a Name_Space
771           which uses ACE_Registry as the persistence mechanism.  Win32
772           clients of ACE_Naming can now start using (the more robust and
773           reliable) Registry persistence without any major code changes.
775         * tests/Naming_Test.cpp: Added the use of Registry_Name_Space to
776           the test if we are on Win32 and UNICODE is turned on.
778         * examples/Registry: Fixed UNICODE behavior of the tests
780 Wed Dec 11 20:33:28 1996  Douglas C. Schmidt  <schmidt@lindy.cs.wustl.edu>
782         * ace/Synch_T.h: Added a warning that indicates why it isn't
783           possible to use ACE_Process_Condition<ACE_Process_Mutex> on
784           Win32...
786         * tests/TSS_Test.cpp: Moved the Errno class to a file
787           TSS_Test_Errno.h and replaced the Errno class with the #include
788           "TSS_Test_Errno.h" to work around "features" with AIX C++'s
789           template instantiation scheme.
791         * ace/OS.i (inet_aton): Replaced the use of ((ACE_UINT32) -1) with
792           ((ACE_UINT32) ~0).  I expect this is more portable...
794         * tests/run_tests.bat: Added "Service_Config_Test" to the
795           run_tests.bat file.
797 Tue Dec 10 22:59:26 1996  Irfan Pyarali  <irfan@flamenco.cs.wustl.edu>
799         * tests: Added Service_Config_Test to Win32 makefiles.
801         * ace/OS.i (inet_aton): We need to cast htonl to (long)
803         * tests: Added/Fixed UNICODE behavior of the following:
805           MM_Shared_Memory_Test.cpp
806           Mem_Map_Test.cpp 
807           Mutex_Test.cpp
808           Naming_Test.cpp 
809           Process_Mutex_Test.cpp 
810           SPIPE_Test.cpp
811           Time_Service_Test.cpp 
812           Tokens_Test.cpp 
813           UPIPE_SAP_Test.cpp
815         * netsvcs/lib: Added/Fixed UNICODE behavior of the following:
816           ACE_TS_Clerk_Processor::poolname_
817         
818 Tue Dec 10 00:33:08 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
820         * tests/Service_Config_Test.cpp (main): Added a new method called
821           run_test() to ensure that ACE_Service_Config daemon is destroyed
822           before we try to end the test.
824         * ace/OS.i (inet_aton): We need to cast -1 to (ACE_UINT32).
826         * tests/Process_Mutex_Test.cpp (main): Added a minor change to
827           make gcc happy by moving the definition of int i *outside* the
828           loop.  Thanks to Thilo Kielmann
829           <kielmann@informatik.uni-siegen.de> for reporting this.
831         * ace/OS.h: gcc complains about memcmp, memcpy, strcmp, and strcpy
832           (from ACE_OS::) being used before defined inline.  This is due
833           to the include of SString.h at the end of OS.h.  So I reordered
834           things in accordance to the changes from Thilo Kielmann
835           <kielmann@informatik.uni-siegen.de>.
837         * build/SunOS5.5/examples/Shared_Malloc/test_multiple_mallocs.cpp:
838           Changed the definition of char *base_addr to void *base_addr.
840         * ace/Memory_Pool.cpp (ACE_MMAP_Memory_Pool_Options): Changed the
841           definition of char *base_addr to void *base_addr.
843         * Put out what is hopefully the final beta release of 4.0.33.
845         * ace/Message_Queue: Added the enqueue() method again to maintain
846           backwards compatibility.  Thanks to Karlheinz for pointing out
847           the need for this.
849         * ace/Service_Config.h: The svc.conf factory functions were 
850           begin defined as extern "C", but the function pointer defined in
851           the ACE_Static_Svc_Descriptor struct is not declared as extern
852           "C", therefore, there was a mismatch.  Here's how to fix this:
854           In Service_Config.h, before the struct ACE_Static_Svc_Descriptor
855           add:
857           extern "C" {
858             typedef ACE_Service_Object *(*ACE_SERVICE_ALLOCATOR)(void);
859           }
861           Then in the struct alloc_ field was changed as follows:
863           from:  ACE_Service_Object *(*alloc_)(void);
864           to:    ACE_SERVICE_ALLOCATOR alloc_;
866           Thanks to Chuck Gehr for this.
868         * ace/Memory_Pool.cpp (commit_backing_store_name): Changed uses of
869           "counter" from int to size_t to remove warnings.
871         * ace/ACE.cpp: Reimplemented the ACE::daemonize() method to
872           conform to the latest version in Richard Steven's new UNP book.
874         * ace/INET_Addr.cpp (set): Replaced the use of ACE_OS::inet_addr()
875           with ACE_OS::inet_aton().  Thanks to W. Richard Stevens for this
876           idea ;-).
878         * ace/OS: Added a new function called inet_aton(), which is based
879           on a new POSIX socket addressing function that is non-ambiguous
880           in its return value (unlike inet_addr).
882         * tests: Added a new Service_Config_Test.cpp to make sure that the
883           timeout features mentioned below work.
885         * ace/Service_Config.cpp: Changed the implementation of
886           run_{reactor,proactor,reactorEx}_event_loop so that it returns
887           if the corresponding handle_events() method times out.
888           Thanks to Phil Logan <phill@in.ot.com.au> for reporting
889           this.
891         * ace/LSOCK_Stream: Moved get_remote_addr() from the private part
892           of the class and implemented it using get_local_addr().  This
893           fixes problems that previously occurred when using the
894           ACE_Connector with ACE_LSOCK_Stream.  Thanks to Stuart Powell
895           <stuartp@in.ot.com.au> for this suggestion.
897 Mon Dec  9 22:03:30 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
899         * examples/Threads: Updated the test.mak and test.mdp files to
900           reflect the new name changes.  Thanks to Matthias for this.
902         * ace/ACE.cpp (ldfind): Added new code that will work if the
903           "base" part of the filename to look for is the same on both UNIX
904           and NT. The library name will be made up of three parts
905           [ACE_DLL_PREFIX]base part[ACE_DLL_SUFFIX], where prefix is "lib"
906           on UNIX and nothing on NT and suffix is ".dll" on NT and ".so"
907           on UNIX. If either prefix or suffix are missing from the
908           filename you supply to ldfind they will be added
909           automagically. This all will work independent from the pathname,
910           which will be treated completely separately from the filename
911           and can contain either UNIX style or NT style separators.
913           Examples:
914           Source               NT                       UNIX
915           ===============================================================
916           netsvc               netsvc.dll               libnetsvc.so
917                                (PATH will be evaluated) (LD_LIBRARY_PATH evaluated)
919           libnetsvc.dll        libnetsvc.dll            libnetsvc.dll + warning
920           netsvc.so            netsvc.so + warning      libnetsvc.so 
922           ..\../libs/netsvc    ..\..\libs\netsvc.dll     ../../libs/libnetsvc.so
923                                (absolute path used)         (absolute path used)
925           The first and the last of these 4 examples is the way the new
926           functionality is supposed to be used. You simple supply the
927           pathname and the base part of the filename and ldfind will
928           figure everything out.
930           Thanks to Tilo Chris for this code.
932         * ace/OS.h: Added a new macro called ACE_DLL_PREFIX, which is
933           defined to "" on Win32 and "lib" on UNIX.  Thanks to Tilo for
934           this.
936         * ace/Reactor.cpp (detach): After further thought, I 
937           have commented out the
938           
939           eh->reactor (0);
940           
941           call since I don't think we really need it.
943         * ace/Reactor.cpp (detach): There was a problem with
944           ACE_Reactor::detach().
946           The following lines:
948           // Reinitialize the Reactor pointer to 0.
949           eh->reactor (0);
951           should be moved before:
953           eh->handle_close (handle, mask);
955           This will render the reactor handle not available in the
956           handle_close method but at least handle_close can delete itself.
957           Thanks to Luca for reporting this.
959         * examples/Reactor/Ntalker: Replaced the use of ACE_OS::getopt()
960           with the ACE_Get_Opt iterator.  Thanks to Alexandre Karev
961           <Alexandre.Karev@cern.ch> for suggesting this.
963         * ace/OS.h: Moved the #endif /* ACE_HAS_DCETHREADS ||
964           ACE_HAS_PTHREADS */ once again in order to make sure that the
965           right things happen when #if defined (ACE_HAS_THREADS) is
966           *false*.  Thanks to Robert Lyng <RLyng@msmail.hsii.ccare.com>
967           for reporting this.
969 Mon Dec  9 02:06:48 1996  Irfan Pyarali  <irfan@flamenco.cs.wustl.edu>
971         * ace/SString: Made accessors return const references.
973         * ace/OS.h: Added macro ACE_WIDE_STRING which allows the
974           conversion of char* to wchar_t* when UNICODE is turned on.
975         
976         * ace: Added/Fixed UNICODE behavior of the following:
978           /* Local_Name_Space */
979           ACE_Local_Name_Space_T::context_file_
980         
981           /* ACE */
982           ACE::basename
983         
984           /* Token */
985           ACE_Token::ACE_Token 
987           /* Synch */
988           ACE_File_Lock::ACE_File_Lock
990           /* SPIPE_Addr */
991           ACE_SPIPE_Addr::addr_to_string
992           ACE_SPIPE_Addr::set   
993         
994           /* FILE_Addr */
995           ACE_FILE_Addr::addr_to_string
996         
997           /* DEV_Addr */
998           ACE_DEV_Addr::addr_to_string
999         
1000           /* Addr */
1001           ACE_Addr::addr_to_string
1002           ACE_Addr::string_to_addr
1003           Note: These two were removed from the base class since they are
1004           not common to all Address classes.
1005           
1006           /* Malloc */
1007           ACE_Allocator_Adapter::ACE_Allocator_Adapter
1008           ACE_Malloc::ACE_Malloc
1009         
1010           /* Process */
1011           ACE_Process::start
1012         
1013           /* Shared_Memory_MM */
1014           ACE_Shared_Memory_MM::ACE_Shared_Memory_MM
1015           ACE_Shared_Memory_MM::open
1017           /* Proactor */
1018           ACE_Overlapped_File::ACE_Overlapped_File
1019           ACE_Overlapped_File::open
1021           /* Log_msg */
1022           ACE_Log_Msg::open
1024           /* Naming_Context */
1025           ACE_Name_Options::namespace_dir
1026           ACE_Name_Options::process_dir
1027           ACE_Name_Options::database
1029           /* Registry */
1030           ACE_Predefined_Naming_Contexts::connect
1031           ACE_Predefined_Naming_Contexts::is_local_host
1033           /* SString */
1034           ACE_CString::ACE_CString
1035           
1036           /* Mem_Map */
1037           ACE_Mem_Map::ACE_Mem_Map
1038           ACE_Mem_Map::map
1039         
1040           /* Service_Config */
1041           ACE_Service_Config::logger_key_
1043           /* System_Time */     
1044           ACE_System_Time::ACE_System_Time 
1045         
1046           /* Memory_Pool */
1047           ACE_Sbrk_Memory_Pool::ACE_Sbrk_Memory_Pool
1048           ACE_Shared_Memory_Pool::ACE_Shared_Memory_Pool 
1049           ACE_Local_Memory_Pool::ACE_Local_Memory_Pool
1050           ACE_MMAP_Memory_Pool::ACE_MMAP_Memory_Pool 
1051           ACE_Lite_MMAP_Memory_Pool::ACE_Lite_MMAP_Memory_Pool
1052         
1053           /* OS */
1054           ACE_OS::strstr
1055           ACE_OS::strdup
1056           ACE_OS::hostname        
1057           ACE_OS::open    
1058           ACE_OS::unlink
1059           ACE_OS::dlopen
1060           ACE_OS::dlsym
1061           ACE_OS::cuserid
1062           ACE_OS::fork_exec
1063           ACE_OS::sprintf
1064           ACE_OS::access
1065           ACE_OS::fopen
1066           ACE_OS::getenv
1067           ACE_OS::system
1068           ACE_OS::mkdir
1069           ACE_OS::mktemp        
1070         
1071 Sun Dec  8 19:00:45 1996  Tim H. Harrison  <harrison@lambada.cs.wustl.edu>
1073         * ace/Reactor.cpp (handle_events): Updated this method to use the
1074           ACE_Countdown_Time::update method after the mutex has been
1075           acquired.
1077         * ace/Time_Value.cpp (update): Added an ACE_Countdown_Time::update
1078           method that calls stop and start.  This is useful for methods
1079           such as ACE_Reactor::handle_events that need to update timeout
1080           values after acquiring locks, but before waiting on the
1081           demultiplexing mechanism (e.g. select).
1083         * ace/ReactorEx.cpp (handle_events): Modularized the
1084           implementation of handle_events.  Now it uses helper functions
1085           to significantly simplify the implementation.  Also updated the
1086           header file documentation.
1088         * ace/Timer_Queue: Added a timer_skew_ data member and accessor
1089           methods to ACE_Timer_Queue.  Also added an expire method that
1090           calls gettimeofday and adds the timer_skew_ for you.  These
1091           changes will help simplify Reactor, Proactor, and ReactorEx
1092           code.
1094         * ace/Reactor : Removed timer_skew_.  This code now just calles
1095           timer_queue->expire () with no parameters.  Very clean.
1097         * ace/ReactorEx : Removed timer_skew_ code.
1099         * ace/Proactor : Removed timer_skew_ code.
1101         * examples/Proactor/test_proactor.cpp: Fixed this application so
1102           that it exits when all the data has been sent and received.
1103           Previously, it used a cool timeout mechanism to "guess" when all
1104           the data had been received.  Ahh, but we can't have too much
1105           fun, or people start to get nervous.
1107         * ace/Service_Config.cpp (run_reactorEx_event_loop (Time_Value)):
1108           Fixed the implementation of this method.  It now handles
1109           reactorEx events until end_reactorEx_event_loop is called, or
1110           the specified time value expires.  Also fixed the
1111           run_proactor_event_loop (Time_Value) method.
1113         * examples/ReactorEx/test_timeout.cpp:  Added a new example
1114           application that shows how to use
1115           Service_Config::run_reactorEx_event_loop with timeouts.  Check
1116           the examples/ReactorEx/README file for more details.
1118         * examples/Proactor/test_timeout.cpp:  Added a new example
1119           application that shows how to use
1120           Service_Config::run_proactor_event_loop with timeouts.  Yes, this
1121           screams for common dispatcher interfaces for Reactor, Proactor,
1122           and ReactorEx.
1124 Sun Dec  8 10:27:19 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
1126         * ace/Service_Manager.cpp (init): Changed all uses of "int port"
1127           to "u_short port" to be consistent with socket types.
1129         * ace/ACE.cpp (bind_port): Changed all uses of "int port" to
1130           "u_short port" to be consistent with socket types.
1132         * ace/Remote_Name_Space.cpp: Changed all uses of "int port" to
1133           "u_short port" to be consistent with socket types.
1135         * ace/SV_Semaphore_{Simple,Complex}: Changed all uses of "int n"
1136           to "u_short n" to be consistent with the SYSV types!
1138         * ace/OS.h: Moved the location of the ACE_HAS_USING_KEYWORD macros
1139           until *after* we #include "ace/Time_Value.h".  Thanks to
1140           Matthias for this.
1142         * ace/Signal.cpp: Finished implementing the
1143           ace_signal_handlers_dispatching logic, which wasn't done
1144           entirely earlier.  Thanks to Alexandre Karev
1145           <Alexandre.Karev@cern.ch> for reporting this.
1147         * netsvcs/servers/main.cpp (main): Fixed several small bugs in the
1148           netsvcs main test program.  Thanks to Alexandre Karev
1149           <Alexandre.Karev@cern.ch> for finding this.
1151         * ace/Reactor: Removed the timer_skew_ data member from the 
1152           ACE_Reactor since this is now covered by the
1153           ACE_Timer_Queue.
1155         * ace/Reactor.cpp (handle_events): Added the new version of the
1156           ACE_Countdown_Time to simplify the code.
1158         * ace/Time_Value: Added a new class called ACE_Countdown_Time,
1159           which is used by the Reactor, ReactorEx, and Proactor to keep
1160           track of how much time elapsed.
1162         * ace/config-win32-msvc4.0.h: Added a change that forces the MSVC
1163           compiler to reference the proper Winsock - lib during linking of
1164           ACE.  This change is necessary because a) in the release version
1165           the link to the winsock.lib was completly missing and b) only
1166           wsock32.lib has been included (which is wrong when WinSock2 is
1167           used).  Thanks to Matthias for this.
1169         * ace/Module.cpp (ACE_Module): Added code to zero-out the
1170           q_pair_[2] pointers.  Thanks to Matthias for this.
1172         * tests: Removed the argv name from most main() functions so that
1173           we don't get warnings...
1175         * examples/Threads: Fixed some errors in the threads examples
1176           directory, most of which are ambigious overloads.  Also included
1177           a (MSVC 4.1) makefile for all tests in this directory.  Thanks
1178           to Matthias for this.
1180         * examples/Threads: Renamed all the files by removing the word
1181           "test_" at the beginning.  This is redundant!
1183         * tests/TSS_Test.cpp: If we are running AIX (i.e., if
1184           ACE_TEMPLATES_REQUIRE_PRAGMA), then conditionally avoid
1185           compiling this test program because it doesn't work unless we
1186           split off class Errno due to AIX's rules for generating
1187           templates.  This is too much work to get right...
1189         * ace/OS.i (thr_self): Updated the conditional compilation tests
1190           so that we check for ACE_HAS_THREAD_SELF first.  Thanks to Chris
1191           Lahey for this.
1193         * ace/{config-osf1-3.2.h,config-aix-4.1.x.h}: Updated this file so
1194           that is has the new ACE_HAS_THREAD_SELF macro, which indicates
1195           that the platform uses thread_self() rather than pthread_self().
1197         * ace/config-aix-4.1.x.h: According to Chris Lahey
1198           <Chris_Lahey@cccis.com>, AIX 4.1.x should have ACE_HAS_PTHREADS
1199           rather than ACE_HAS_DCETHREADS.
1201         * ace/Thread_Manager: Removed the thread_descriptor_i() methods
1202           and replaced them by generalizing the find() method to become
1203           find_thread() and find_hthread().  Thanks to Hamutal Yanay
1204           <Hamutal_Yanay@mail.icomverse.com> for suggesting this.
1206 Sun Dec  8 14:39:53 1996  Tim H. Harrison  <harrison@lambada.cs.wustl.edu>
1208         * ace/Timer_Queue: Added a timer_skew_ data member and accessor
1209           methods to ACE_Timer_Queue.  Also added an expire method
1210           that calls gettimeofday and adds the timer_skew_ for you.  These
1211           changes will help simplify Reactor, Proactor, and ReactorEx
1212           code.
1214 Sat Dec  7 01:14:04 1996  Irfan Pyarali  <irfan@flamenco.cs.wustl.edu>
1216         * tests/Process_Mutex_Test.cpp: Added new test which checks the
1217           functionality of a ACE_Process_Mutex.  Abandoned mutexes can be
1218           created by selecting the correct command-line arguments.
1220         * examples/Reactor/ReactorEx/test_reactorEx.cpp: Reverted back to
1221           old scheme which does not utilize traits.
1223         * ace/Task_T.h: Removed the synchronization trait in Task. This is
1224           because template typedefs are only supported by a few
1225           platforms. Sigh ;-)
1227 Sat Dec  7 16:55:37 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
1229         * ace/Thread_Manager.cpp: Because thread_descriptor_i() only returns 
1230           0 or -1 on failure the code for
1231           ACE_Thread_Manager::thr_self(ACE_hthread_t &) should read:
1233           if (-1 == this->thread_descriptor_i (id, td)) 
1234             return -1;                                  
1235           handle = &td.thr_handle_;                             
1237           Thanks to Matthias for reporting this.
1239         * ace/OS: Added a new static instance of ACE_thread_key_t to work
1240           around the pthreads implementation on MVS (which doesn't store
1241           TSS keys as ints!).  Thanks to Chuck Gehr for reporting this.
1243         * ace/config-mvs.h: Added #define ACE_TEMPLATES_REQUIRE_SOURCE for
1244           MVS C++.  Thanks to Chuck Gehr for reporting this.
1246         * ace/Signal.cpp: ace_dispatcher was being set to
1247           ace_signal_handlers_dispatch() which calls
1248           ACE_Sig_Handlers::dispatch (when ACE_HAS_SIC_C_FUNC is defined),
1249           whereas it was set to ACE_SigHanlder::dispatch (no s) if not
1250           defined.  I intended to set this to ace_signal_handler_dispatch
1251           (no s).  Thanks to Chuck Gehr for reporting this.
1253         * ace/Makefile: Fixed a small typo where I wasn't matching char
1254           *getenv in the sed regular expression.
1256         * ace/{OS,Synch}: Moved various classes around so that things will
1257           compile correctly when ACE_WIN32 is defined but ACE_HAS_THREADS
1258           is *not* defined.  Thanks to Robert Lyng
1259           <RLyng@msmail.hsii.ccare.com> for reporting this.
1261 Sat Dec  7 16:55:37 1996  Matthias Kerkhoff <make@cs.tu-berlin.de>
1263         * ace/Module: Added some values to the enum so Module clients
1264           can decide whether the reader, the writer or both should be
1265           automatically deleted.
1267         * ace/{Stream,Module,Task}: Changed some function arguments
1268           from u_long to int (because enums are represented as ints).
1270         * ace/Task: Added a new virtual function to ACE_Task_Base
1271           (module_closed), which by default calls
1272           ACE_Task_Base::close(1). Please note the changed flags
1273           argument. This allows clients to differ between calls
1274           originated from a Module and/or Stream from those which
1275           result from ~ACE_Task_Exit().  ~ACE_Task_Exit() calls
1276           ACE_Task_Base::close(0).  This may be or not be a problem to
1277           existing applications. It may (hopefully not)
1278           be neccessary to change ACE_Task_Base::module_close back to
1279           calling ACE_Task_Base::close(0). 
1281 Fri Dec 06 14:44:20 1996  David L. Levine  <levine@cs.wustl.edu>
1283         * ace/OS.cpp: added ::spa () function to allow command line args
1284           to be passed to programs in VxWorks
1286         * ace/OS.i: (ACE_OS::gettimeofday):  VxWorks returns nsec instead
1287           of usec, so convert
1289 Fri Dec  6 01:21:48 1996  Irfan Pyarali  <irfan@flamenco.cs.wustl.edu>
1291         * examples/Reactor/ReactorEx/test_reactorEx.cpp: Rewrote the
1292           example such that the test now uses the new Notification
1293           Strategy scheme in ACE.  This allows a message queue consumer to
1294           wait in ReactorEx without spawning a new thread, or creating
1295           extra Win32 events.  This make the example smaller and much
1296           cleaner.
1298         * ace/Task_T.h: Added synchronization trait to Task.
1300         * ace/Task_T.i (msg_queue): Added a check to delete the old
1301           message_queue if we had created it.
1303         * ace/ReactorEx.cpp (remove_handler): Removed the call to set
1304           reactorEx of the event handler to zero becauses the event
1305           handler  may no longer be there after the handle_close()
1306           completes. 
1308 Thu Dec 05 21:18:49 1996  David L. Levine  <levine@cs.wustl.edu>
1310         * ace/OS.cpp (thr_create): Oops, needed to add another check if
1311           thr_id == 0 before assigning *thr_handle = *thr_id, for systems
1312           such as Solaris 2.4 that don't have PTHREADS.
1314 Wed Dec  4 09:09:56 1996  David L. Levine  <levine@cs.wustl.edu>
1316         * ace/Log_Msg.cpp (log):  added printout to stderr before call
1317           to exit().  Silent calls to exit() are bad :-}
1319         * performance-tests/Synch-Benchmarks/Options.cpp (print_results):
1320           only use rusage if ACE_HAS_PRUSAGE_T is #defined
1322         * examples/IPC_SAP/SOCK_SAP/CPP-in{client,server}.cpp:
1323           use blocking connect on VxWorks
1325         * ace/config-vxworks*.h: added ACE_LACKS_MPROTECT and
1326           ACE_HAS_STRERROR
1328         * include/makeinclude/platform_vxworks*: removed INCLDIRS and
1329           added indlib.o to GreenHills LIBS
1331         * Makefile (cleanrelease and release): changed "rm -r" of
1332           ACE.tar.gz to "rm -f", that's probably what was meant
1334 Wed Dec  4 00:27:07 1996  Irfan Pyarali  <irfan@flamenco.cs.wustl.edu>
1336         * ace/config-win32-msvc*.0.h: Added NOMINMAX.
1338         * ace/Registry: Removed NOMINMAX and
1339           VC_PLUS_PLUS_NESTED_CLASS_PROBLEM flags from the header file.
1340           The VC_PLUS_PLUS_NESTED_CLASS_PROBLEM flag is no longer needed
1341           and NOMINMAX is defined at the project level.  Thanks to
1342           Matthias Kerkhoff <make@cs.tu-berlin.de> for suggesting this. 
1344 Mon Dec  2 14:13:44 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
1346         * ace: Changed all occurrences of ACE_Event_Handler
1347           reactorex() to reactorEx() to be consistent.  Thanks to
1348           Matthias for suggesting this.
1350         * ace/Message_Queue.cpp (close): We didn't allocate the memory for
1351           the notification_strategy_, so we darn well can't delete it!
1352           Thanks to Matthias for finding this.
1354         * ace/Log_Msg.cpp (ACE_TSS_cleanup): Made the ACE_TSS_cleanup
1355           function extern "C" for MVS C++ and compilers like it...  Thanks
1356           to Chuck Gehr for reporting this.
1358         * tests/Naming_Test.cpp (main): Added delete ns_context to close
1359           things down and free up the semaphores.  Thanks to David Levine
1360           for suggesting this.
1362         * examples/Reactor/Misc/test_demuxing.cpp (handle_input): Fixed a
1363           "typo" where we were accessing mb->msg_priority() *after*
1364           deleting it!  Thanks to Matthias for finding this.
1366 Mon Dec  2 09:57:15 1996  David L. Levine  <levine@cs.wustl.edu>
1368         * tests/run_tests.*: updated lists of tests to be run
1370         * tests/*.cpp: removed trailing .cpp from argument to
1371           ACE_START_TEST because it would appear in the log file name
1373 Mon Dec  2 00:08:51 1996  Douglas C. Schmidt  <schmidt@lambada.cs.wustl.edu>
1375         * ace/Log_Record.cpp (dump): There was an error on line 19 of
1376           Log_Record.cpp: 
1378           ACE_DEBUG ((LM_DEBUG, "\npid_ = %s\n", this->pid_));
1380           should be changed to:
1382           ACE_DEBUG ((LM_DEBUG, "\npid_ = %d\n", this->pid_));
1384           Thanks to Sandro Doro <alex@aureus.sublink.org> for reporting
1385           this.
1387         * examples/Reactor/Misc/test_handle_set.cpp: Updated the test to
1388           remove a warning caused by sloppy nesting of loop counters.
1390 Mon Dec  2 00:23:23 1996  Irfan Pyarali  <irfan@flamenco.cs.wustl.edu>
1392         * ace/Strategies.{h,cpp}: Update the base-class and added
1393           documentation.
1395         * tests/test_config.h: Added ACE_INIT_LOG, ACE_APPEND_LOG and
1396           ACE_APPEND_LOG to facilitate the appending of log messages to a
1397           file.  Also changed Pipe_Test to use this new mechanism.
1399         * test/Naming_Test: Changed test to use "lite" implementation to
1400           speed things up. 
1402         * netsvcs/lib: Fixed multiple type mismatch warnings.
1403         
1404         * ace/ReactorEx: Fixed syntax errors in recently modified
1405           ReactorEx.* files
1407         * ace/ace.{mdp.mak}: Added Strategies.cpp to VC++ makefile.
1409 Sun Dec  1 19:19:02 1996  Douglas C. Schmidt  <schmidt@lambada.cs.wustl.edu>
1411         * ace/Service_Config: Moved the #inclusion of ace/Proactor.h and
1412           ace/ReactorEx.h from the *.h file to the *.cpp file to avoid
1413           problems with circular dependencies.
1415         * ace/Reactor: Added a new parameter to the Reactor's
1416           initialization methods so that we can install a subclass of
1417           ACE_Timer_Queue.  This is in anticipation of Tim's new
1418           "real-time" implementation of a timer queue.
1420         * ace/Reactor: Changed the internal Reactor name
1421           ACE_Notification_Handler to ACE_Reactor_Notify to be consistent
1422           with the ACE_ReactorEx_Notify class.
1424         * examples/Reactor/Misc/test_demuxing.cpp: Revised this test so
1425           that it now illustrates the new notification mechanism of the
1426           ACE_Message_Queue class.
1428         * examples/Reactor/Misc: Changed the name of the signal_tester.cpp
1429           file to test_demuxing.cpp, which is really what this does.
1431         * ace/{Strategies,Message_Queue}: Created a suite of
1432           "Notification Strategies" that are used with the new
1433           ACE_Message_Queue notification scheme.  This works as
1434           follows:
1436           1. There's a new virtual hook method on ACE_Message_Queue
1437              called notify().  Whenever a new Message_Block is
1438              enqueued the notify() hook is called.  By default, this
1439              does nothing. 
1441           2. If you want to do something with the notify() hook, you
1442              have two choices:
1443    
1444                 a. You can subclass from ACE_Message_Queue and
1445                    override this method.  This is an example of the
1446                    "Template Method" pattern. 
1448                 b. You can configure an ACE_Notification_Strategy *
1449                    into an ACE_Message_Queue.  An
1450                    ACE_Notification_Strategy is the vehicle for
1451                    extending the behavior of ACE_Message_Queue wrt
1452                    notification *without subclassing*.  Thus, it's an
1453                    example of the Bridge/Strategy patterns. 
1454       
1455           3. ACE_Notification_Strategy is defined in
1456              ace/Strategies.{h,cpp}. There are two pre-defined
1457              subclasses: 
1458   
1459                 a. ACE_Reactor_Notification_Strategy -- integrates the
1460                    ACE_Message_Queue notification into the
1461                    ACE_Reactor::notify() method.
1463                 b. ACE_ReactorEx_Notification_Strategy -- integrates
1464                    the ACE_Message_Queue notification into the
1465                    ACE_ReactorEx::notify() method.
1467           Both of these can be used almost identically in order to 
1468           seamlessly integrate multiple threads of control, inserting 
1469           ACE_Message_Blocks in one or more ACE_Message_Queues, with
1470           the various ACE event demultiplexors (i.e., ACE_Reactor 
1471           and ACE_ReactorEx).
1473         * ace: Created a new pair of files called Strategies_T.cpp and
1474           Strategies_T.h and move the template ACE_*Strategies classes
1475           into those files.  This was necessary since there are now new
1476           non-template notification strategies in Strategies.{h,cpp}.
1478         * ace/Message_Queue: Created a new "notification hook" mechanism
1479           that makes it possible for event demuxers (like ACE_Reactor and
1480           ACE_ReactorEx) to be informed automatically when a Message_Block
1481           is inserted into the Message_Queue.  This is useful for
1482           sitations where you'd like to integrate multiple threads (each
1483           of which is pumping data into an ACE_Message_Queue) with an
1484           ACE_Reactor or an ACE_ReactorEx.  Thanks to Matthias Kerkhoff
1485           <make@cs.tu-berlin.de> and Luca for suggesting this.
1487         * ace/Synch.h: Modified the implementation of
1488           ACE_Null_Condition_Mutex::wait() so that it always returns -1
1489           and sets errno to ETIME.  This reflects the fact that if you'll
1490           never be awakened if you "sleep" on a Null_Condition...
1492         * ace/ReactorEx: Generalized the ACE_ReactorEx so that its
1493           notify() method now behaves like the ACE_Reactor, i.e., it can
1494           queue up ACE_Event_Handlers that are dispatched in the ReactorEx
1495           thread of control.
1497         * tests: Renamed the Shared_Memory_MM_Test.cpp to
1498           MM_Shared_Memory_Test.cpp and remove the
1499           Shared_Memory_SV_Test.cpp since it was redundant to the
1500           SV_Shared_Memory_Test.cpp.
1502         * tests/SV_Shared_Memory_Test.cpp (main): Revised the SVSV IPC
1503           shared memory test to be more robust.
1505         * ace/SV_Semaphore_Simple.cpp (open): If the char *name == 0 then
1506           use ACE_DEFAULT_SEM_KEY instead.
1508         * ace/Memory_Pool: Generalized the ACE_Shared_Memory_Pool so that
1509           there can be more than 1 shared memory pool active at a time
1510           (similar to what we did for ACE_MMAP_Memory_Pool).
1512         * ace/Memory_Pool.h: There was an unnecessary
1513           ACE_SV_Semaphore_Complex in ACE_Shared_Memory_Pool that was left
1514           over from earlier days.  I've removed this.
1516         * ace/Memory_Pool.cpp (ACE_Shared_Memory_Pool): Revised
1517           the constructor so that if we get a NULL pool_name we'll
1518           initialize the 
1520         * examples/Makefile: Added the System_V_IPC and Shared_Memory
1521           directories.
1523         * ace/Message_Queue.h: Added a virtual destructor to
1524           ACE_Message_Queue so that it can be destroyed appropriately,
1525           even if subclassed.
1527         * ace/Message_Queue.h: Renamed enqueue() to enqueue_prio() to be
1528           consistent with the other names (e.g., enqueue_head() and
1529           enqueue_tail().  Updated the test programs to reflect this.
1531 Sun Dec  1 12:06:46 1996  David L. Levine  <levine@cs.wustl.edu>
1533         * ace/config-vxworks*.h: Removed #define ACE_HAS_STRBUF_T:
1534           copy and paste error
1536 Sun Dec  1 00:15:45 1996  Irfan Pyarali  <irfan@flamenco.cs.wustl.edu>
1538         * ace/OS.h: ACE_NEW_RETURN and ACE_NEW were reverted back to the
1539           old implementation.  This is temporary till the infinite loop
1540           problem with ACE_ERROR, ACE_DEBUG and ACE_TRACE being called
1541           from ACE_Log_Msg::instance() is fixed.
1543         * ace/Synch.h: Repositioned ACE_Semaphore such that there are no
1544           problems in compiling ACE_Process_Semaphore under Win32. 
1546         * ace/config-win32-msvc4.0.h: Changed ACE_HAS_STL to
1547           ACE_HAS_STANDARD_CPP_LIBRARY which is more descriptive (and what
1548           is expected by stdcpp.h).
1550         * ace/Registry.h: Added the setting of NOMINMAX and
1551           VC_PLUS_PLUS_NESTED_CLASS_PROBLEM flags so that STL behaves
1552           properly.
1554         * ace/Log_Msg.cpp (open): Fixed a small bug such that msg_ostream
1555           is only set this to cerr if it hasn't already been set.
1557         * STL: Updated the STL directory will latest code from
1558           http://www.rahul.net/terris/ and also added the original
1559           readme2.stl file.  Created ACE_Changes which has the list of
1560           changes made to the STL distribution.
1562 Sat Nov 30 12:02:00 1996  Douglas C. Schmidt  <schmidt@lambada.cs.wustl.edu>
1564         * ace/OS.h: Added a new pragma that disables warning #4097 in
1565           MSVC++ (typedef-name used as synonym for class-name).  This
1566           keeps Win32 clients from getting warning on Win32.  Thanks to
1567           Matthias Kerkhoff <make@cs.tu-berlin.de> for this.
1569         * ace/Log_Msg.cpp: Created a new macro called ACE_NEW_RETURN_I,
1570           which is used withing ACE_Log_Msg::instance().  We can't afford
1571           to call ACE_LOG_MSG->instance() from within
1572           ACE_Log_Msg::instance() or else we will recurse infinitely!
1573           Thanks to Irfan for finding this.
1575         * ace/OS.i (mprotect): Added a #if !defined (ACE_LACKS_MPROTECT)
1576           conditional compilation directive to support the EPLX real time
1577           OS from CDC (based on LYNX).  Thanks to Alexandre Karev
1578           <karev@cern.ch> for reporting this.
1580 Sat Nov 20 12:23:45 1996  Prashant Jain  <pjain@merengue.cs.wustl.edu>
1582         * tests/Naming_Test.cpp (main): Added code that creates a unique
1583           backing store name and removes the backing store every time
1584           the test is run.
1586 Fri Nov 29 12:54:12 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
1588         * ace/Stream.cpp (open): Changed tail->close() and head->close()
1589           to delete tail and delete head now that we've got our new
1590           changes.
1592         * ace/Module: Moved the destructor from the private part of the
1593           class to the public part and changed things so that close() no
1594           longer "deletes this."  This is too confusing and error-prone.
1595           In addition, changed the Module destructor so that it will try
1596           to call close() only if close hasn't already been called.
1598         * ace/Synch.h: Moved ACE_Process_Semaphore out of the
1599           ACE_HAS_THREADS section since this is available on platforms
1600           that don't have threads.
1602         * Now that Log_Msg.h is being #included in OS.h, I removed all
1603           other #includes of Log_Msg.h throughout the rest of ACE.
1605         * ace/OS.h: Rearranged the definition of the ACE_NEW and
1606           ACE_NEW_RETURN macros so that they come at the end of OS.h.
1607           This enables us to #include "ace/Log_Msg.h" here, as well, so
1608           that we can make use of the ACE_LOG_MSG macro in the definition
1609           of ACE_NEW and ACE_NEW_RETURN.
1611         * ace/Singleton.cpp (instance): Updated the ACE_Singleton
1612           implementation to use the new ACE_NEW and ACE_NEW_RETURN macros.
1614         * ace/OS.h: Revised the ACE_NEW and ACE_NEW_RETURN macros so that
1615           they check to see if the constructor of the newly allocated
1616           object failed (i.e., by checking the ACE_LOG_MSG->op_status()
1617           value).
1619         * tests/Reactors_Test.cpp: Added an ACE_ASSERT() after each
1620           Reactor we create in order to make sure it worked.
1622         * tests/Reactors_Test.cpp: Added an ACE_Service_Config daemon
1623           instance within main() in order to ensure that the Reactor is
1624           cleaned up appropriately.  This avoids problems with NT 4.0,
1625           where there seems to be a bug if you don't shut down sockets
1626           explicitly when the process exits.
1628         * tests/Pipe_Test.cpp (main): Improved the pipe test so that it
1629           automatically iterates multiple times in order to test whether
1630           there are problems with rapidly opening and closing NT socket
1631           handles...
1633 Thu Nov 28 03:07:48 1996  Irfan Pyarali  <irfan@flamenco.cs.wustl.edu>
1635         * netsvcs: netsvcs.mak and netsvcs.mdp were changed such that
1636           it becomes easier to find ace.lib while compiling netsvcs.lib.
1638         * tests/Pipe_Test.cpp: Add more instances of ACE_Pipes to the test
1639           and also added an option to close down the pipe.
1641 Thu Nov 28 00:53:16 1996  Douglas C. Schmidt  <schmidt@lambada.cs.wustl.edu>
1643         * ace/config-sunos4-g++.h:  This config file contained two
1644           exclusive definitions
1646           #define ACE_HAS_SVR4_SIGNAL_T
1648           and
1650           #define ACE_HAS_SUNOS4_SIGNAL_T
1652           The first one was moved out.  Thanks to Alexandre Karev
1653           <akg@na47sun05.cern.ch> for reporting this.
1655         * ace/OS.h:
1657           #elif defined (ACE_HAS_SUNOS4_SIGNAL_T)
1659           was changed from
1661           typedef void (*ACE_SignalHandler)(void);
1662           typedef void (*ACE_SignalHandlerV)(void);
1664           to
1666           typedef void (*ACE_SignalHandler)(...);
1667           typedef void (*ACE_SignalHandlerV)(...);
1669           to make gcc happy.  The first one was moved out.  Thanks to
1670           Alexandre Karev <akg@na47sun05.cern.ch> for reporting this.
1672         * ace/Pipe.cpp (close): Arrgh!  Fixed a total braino where we
1673           weren't using ACE_OS::closesocket() to close down the Win32
1674           ACE_Pipe implementation, which uses sockets...  Thanks to Irfan
1675           and Tilo for helping me figure this one out!
1677         * tests/CPP_Test.cpp: Completely reworked this test so that it
1678           should run correctly on Win32 and UNIX.
1680 Wed Nov 27 16:50:17 1996  Douglas C. Schmidt  <schmidt@lambada.cs.wustl.edu>
1682         * Put out a new beta of ACE 4.0.33.
1684         * tests/Mutex_Test.cpp (test): Fixed the test() function so that
1685           it doesn't use the ACE_Thread_Control unless we explicitly want
1686           to use threads.
1688         * tests/test_config.h: Added addition information about the
1689           process id and thread id of the main thread.
1691         * ace/Synch.h: Speed things up a bit by conditionally #including
1692           "ace/SV_Semaphore_Complex.h" only if we are compiling on a
1693           non-Win32 platform or a POSIX platform.  Thanks to Matthias
1694           Kerkhoff <make@cs.tu-berlin.de> for this.
1696         * ace/SV_Semaphore_Complex.h: Incorporated the new ACE_USING
1697           macro, which is useful if you have
1699           class b {
1700             a()
1701           };
1703           class d : private b {
1704             b::a()                      // still works, but depriciated
1705             using b::a()                // should be used instead
1706           };
1708           Thanks to Matthias Kerkhoff <make@cs.tu-berlin.de> for this.
1710         * ace/OS.h: Added a new macro called ACE_USING, which is used to
1711           distinguish between platforms that support namespace "using"
1712           semantics and those that don't.  Thanks to Matthias Kerkhoff
1713           <make@cs.tu-berlin.de> for this.
1715         * examples/Misc/test_XtReactor[12].cpp: Had to add the infamous
1716           #define String XtString before including Xm/PushB.h. Also, there
1717           were some references to XtReactor when the class is now
1718           ACE_XtReactor.  Thanks to Gonzalo Diethelm <gonzo@ing.puc.cl>
1719           for reporting this.
1721         * ace/XtReactor.cpp (ACE_XtReactor): timeout_ was not being
1722           initialized on the constructor, and that caused a core dump.
1723           Thanks to Gonzalo Diethelm <gonzo@ing.puc.cl> for reporting
1724           this.
1726         * ace/SOCK.h: Put the open() call in the protected part of the
1727           class since we generally don't want clients to call this
1728           directly.  Thanks to Eric Newton <ecn@clark.net> for pointing
1729           this out.
1731         * ace/ACE.cpp: Fixed a bug where sin.sin_family was being set
1732           rather than sin.sin_len.  Thanks to Chuck Gehr
1733           <gehr@sweng.stortek.com> for reporting this.
1735         * ace/ACE.cpp: Enhanced the ACE::{send_n,recv_n} methods so that
1736           they check to see if errno == EWOULDBLOCK when ACE_OS::send() or
1737           ACE_OS::recv() returns -1.  If that's the case, then they keep
1738           iterating.
1740           Thanks to Mehdi TABATABAI <Mehdi.TABATABAI@ed.gva.sita.int> for
1741           this suggestion.
1743         * ace/Log_Msg.h: Fixed ACE_RETURN so that it only has 1 parameter
1744           if ACE_NLOGGING is enabled.  Thanks to Antonio Tortorici
1745           <antonio@rh0011.roma.tlsoft.it> for reporting this.
1747         * ace/config-vxworks*.h: Added ACE_NTRACE macros so that 
1748           tracing doesn't magically turn on!
1750         * ace/Task.cpp (activate): the &ACE_Task_Base::svc_run() argument
1751           needs a cast to ACE_THR_FUNC, because that's what
1752           ACE_Thread_Manager::spawn_n() requires.  On VxWorks,
1753           ACE_THR_FUNC functions return an int, while svc_run() returns
1754           void *.  Thanks to David Levine for this.
1756         * ace/Thread_Manager.cpp (kill_thr): I was mistakenly passing in
1757           the thr_handle_ where I should have been passing in the thr_id_.
1758           In addition, made sure we don't set errno to the wrong value...
1759           Thanks to Ross Dargahi <rossd@acm.org> for reporting this.
1761         * ace/{Synch_T,Synch}.h: If we don't actually own the lock
1762           anymore, don't try to do a release.  Thanks to Jonathan Biggar
1763           <jon@sems.com> for reporting this bug.
1765         * ace/ACE.cpp (handle_timed_complete): Added an ex_handles mask so
1766           that non-blocking connects will work correctly on Win32.  Thanks
1767           to Antonio Tortorici <antonio@rh0011.roma.tlsoft.it> for
1768           reporting this fix.
1770         * ace/Message_Queue.h: Updated the documentation to stress the
1771           fact that the timeouts are specified in *absolute* time, rather
1772           than in relative time.  Thanks to Bob Dunmire <bobd@titan.com>
1773           for reporting this.
1775         * tests/test_config.h: Modified the ACE_END_TEST macro so that the
1776           log file is closed.  This works around a problem on VxWorks
1777           where destructors of static objects don't get closed
1778           automatically.  Thanks to David Levine for this fix.
1780         * ace/OS.i (rand_r): Added a fix for Digital UNIX so that rand_r
1781           works correctly in MT settings.  Thanks to Thilo Kielmann
1782           <kielmann@informatik.uni-siegen.de> for this.
1784 Wed Nov 27 16:12:00 1996  Tim H. Harrison  <harrison@lambada.cs.wustl.edu>
1786         * ace/Stream.cpp: Fixed a bug in ACE_Stream::open to
1787           allow applications to specify a tail or a head without
1788           having to specify both.  This was needed by the ACE_Pipeline
1789           application since it only needs a Pipeline-specific tail
1790           (not a head). 
1792 Tue Nov 26 18:00:25 1996  Douglas C. Schmidt  <schmidt@lambada.cs.wustl.edu>
1794         * ace: Functions should not be declared with ACE_INLINE in a
1795           .cpp file.  Fixed this problem in the following files:
1797           SPIPE_Acceptor.cpp:116:ACE_INLINE
1798           TLI_Acceptor.cpp:145:ACE_INLINE int
1799           TLI_Acceptor.cpp:192:ACE_INLINE
1800           Task.cpp:121:ACE_INLINE int
1801           Task.cpp:130:ACE_INLINE void
1803         * ace/{OS,Thread}: Added Chuck Gehr's suggested change for the
1804           pthread_keycreate() routine, which must take extern "C"
1805           functions on MVC C++.  This fix isn't perfect, but it should
1806           allow the ACE library to build...
1808         * man: Updated all of the manual pages and HTML files.
1810         * ace/Signal.cpp: Updated the code so that we don't try to
1811           register a static C++ dispatch method if ACE_HAS_SIG_C_FUNC is
1812           defined.  This fixes problems with the MVS C++ compiler...
1813           Thanks to Chuck Gehr for this suggestion.
1815         * ace/OS.h: Added extern "C" { } wrappers around the signal
1816           handling mechanisms if ACE_HAS_SIG_C_FUNC is defined.  This
1817           fixes problems with the MVS C++ compiler...  Thanks to Chuck
1818           Gehr for this suggestion.
1820         * ace/Reactor.cpp (open): Moved the initialization of the
1821           ACE_Timer_Queue field to *before* the handler_rep_.open() call.
1822           We do this first in case the handler_rep_ call fails (which it
1823           sometimes does on Win32 when we restart applications quickly due
1824           to the use of sockets as a notification mechanism).  At least
1825           this way the timer_queue_ isn't 0, so we can still use the
1826           Reactor as a timer...  Thanks to Tilo Christ for motivating
1827           me to fix this.
1829         * ace/OS.i: Apparently, DIGITAL_UNIX gethostbyname() returns
1830           thread-specific storage, so we can use this for
1831           gethostbyname_r().
1833         * ace/OS.i: Need to add:
1835           #else
1837           after line 3268: return (size_t) ACE_OS::sysconf (_SC_THREAD_STACK_MIN);
1839           otherwise we get a compile error:
1841           line 3296.1: CBC1331(W) Return value of type "unsigned int" is expected
1843           This is because no code ends up getting generated.  Thanks to Chuck
1844           Gehr for this fix.
1846         * ace/OS.i (ACE_PTHREAD_CLEANUP_PUSH): Removed an extraneous set
1847           of parens.  Thanks to Chuck Gehr for this fix.
1849         * ace/OS.cpp (thr_create): Oops, needed to add a check if thr_id
1850           == 0 before assigning *thr_handle = *thr_id!  Thanks to Prashant
1851           for finding this.
1853 Tue Nov 26 21:06:13 1996  Irfan Pyarali  <irfan@flamenco.cs.wustl.edu>
1855         * ace/Pipe.cpp (open): This change relates to Win32 code only.
1856           Removed the reuse_addr flag to acceptor.open() so that we don't
1857           try to reuse the acceptor socket immediately. Apparently, this
1858           causes no end of trouble on Win32 as the following connect()
1859           call fails (randomly).  Now it should be possible to create
1860           multiple ACE_Pipes in one process and hence create multiple
1861           Reactors also without any problems.
1863         * tests/Pipe_Test.cpp: Added a ACE_Pipe test to check for the
1864           creation of multiple pipes in a process.  Also changed the
1865           relevant makefiles and scripts.
1867 Tue Nov 26 11:27:33 1996  David L. Levine  <levine@cs.wustl.edu>
1869         * tests/{CPP_Test,Mutex_Test,Shared_Memory_MM_Test,SPIPE_Test}.cpp:
1870           added VXWORKS support for these tests by spawning a new thread
1871           instead of forking a new process (the same as on Win32)
1873         * netsvcs/clients/Naming/Client/Client_Test.cpp (open): Added a
1874           return 0 for success.
1876         * ace/Singleton.h: Modified the use of the ACE_NEW_RETURN macro so
1877           we not only check if new has failed, but also check that the
1878           constructor has succeeded.  If it hasn't, we bail out...  Thanks
1879           to Luca for this suggestion.
1881         * ace/Log_Msg: Added a 4th parameter to log_hexdump() in order to
1882           print out a comment.  Thanks to Luca for this.
1884         * ace/ACE.cpp (ldfind): Changed the implementation to look for
1885           ACE_DLL_SUFFIX rather than '.' since '.' might exist in the
1886           pathname already...
1888         * Removed all the NT-specific svc.conf files and updated the other
1889           files to use the new "auto-dll-suffix" feature in ACE.
1891         * ace/Synch_T.cpp (ts_get): Fixed a nasty bug introduced by recent
1892           changes to ACE_TSS<>::ts_get().  The ACE_Mutex should be
1893           ACE_Thread_Mutex.  This should fix lots of nasty run-time bugs
1894           seen with recent versions of the ACE 0.33 beta...
1896 Tue Nov 26 14:40:00 1996  David L. Levine  <levine@cs.wustl.edu>
1898         * Log_Msg.cpp: fake out TSS on VxWorks in Log_Msg::instance()
1899           by using a spare field in the task control block
1901         * tests/{CPP_Test,Mutex_Test,Shared_Memory_MM_Test,SPIPE_Test}.cpp:
1902           added VXWORKS support for these tests by spawning a new
1903           thread instead of forking a new process (the same as on
1904           Win32)
1906         * OS.h: VxWorks can't handle the ACE_THR_FUNC typedef if
1907           it's in the extern "C" block, so I moved it back out.
1908           Also, the horrible GreenHills hack is no longer required.
1910         * OS.i: there's an ACE_OS_CALL_RETURN before a ::strncpy() call, 
1911           I changed it to ACE_OS_CALL.
1913         * OS.i: Added call to VxWorks ::mkdir()
1915         * Pipe.cpp: VxWorks doesn't know about TCP_NODELAY.
1917         * INET_Addr.cpp: get_host_name() is missing a return
1918           statement, on VxWorks only   
1920         * Thread_Manager.i:  in ACE_Thread_Control::thr_mgr(), there
1921           were two consecutive return statements, removed the first
1922           one.
1924         * Time_Request_Reply.{h,cpp}:  GreenHills warns that "type
1925           qualifiers are meaningless" for declaration of const
1926           ACE_UINT32 time(), so I removed them.
1928         * UPIPE_Stream.cpp, line 95: warning: integer conversion
1929           resulted in a change of sign, so we cast n to int.
1931         * Map_Manager.cpp: in ACE_Map_Manager::resize_i(), variable
1932           foo is unnecessary, so we omitted it.
1934         * tests/CPP_Test.cpp (and a few others) have references to
1935           argv[0]:
1937 Tue Nov 26 03:15:22 1996  Irfan Pyarali  <irfan@flamenco.cs.wustl.edu>
1939         * tests: Added Map_Manager_Test and Message_Queue_Test to
1940           makefiles (NT and UNIX) and one-button scripts.
1942         * tests: (Barrier_Test.cpp Buffer_Stream_Test.cpp Mutex_Test.cpp
1943           Priority_Buffer_Test.cpp Recursive_Mutex_Test.cpp
1944           Shared_Memory_MM_Test.cpp) Fixed typos mainly and other small
1945           changes. Also fixed logging file problems so to make logging
1946           of tests more accurate.
1948 Mon Nov 25 00:23:40 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
1950         * performance-tests/Synch-Benchmarks/Options.cpp (Options):
1951           Reordered the initialization of data members to keep G++ from
1952           complaining.
1954         * performance-tests/Synch-Benchmarks/pipe_thr_test.cpp: Changed
1955           some types so that we don't get warnings.
1957         * tests/Mutex_Test.cpp (test): Added a "return 0".  Thanks to
1958           David Levine for reporting this.
1960         * ace/TTY_IO.cpp: Rearranged some definitions so that we don't get
1961           "unused variable" warnings from g++.
1963         * ace/SOCK_Dgram.cpp (recv): Rearranged some definitions so that
1964           we don't get "unused variable" warnings from g++.
1966         * tests/Priority_Buffer_Test.cpp (consumer): Fixed a typo -- I was
1967           missing a *...  Thanks to David Levine for reporting this.
1969         * ace/OS.h (ACE_SVC_FACTORY_DECLARE): Changed the macro so that it
1970           defines a function with `extern "C"' linkage in order to be
1971           consistent.
1973         * ace/OS.cpp (thr_create): Moved the conditional compilation test
1974           for ACE_HAS_THR_C_FUNC outside of ACE_HAS_SETKIND_NP since MVS
1975           doesn't have this!  Thanks to Chuck Gehr for this info.
1977         * ace/OS.i (thr_sigsetmask): Replaced the tests for
1978           ACE_HAS_DCETHREADS and ACE_HAS_SETKIND_NP with
1979           ACE_LACKS_PTHREAD_THR_SIGSETMASK, which is more appropriate.
1980           
1981         * ace/OS.cpp (ace_mutex_lock_cleanup_adapter): Changed the
1982           signature so that it returns "void" rather than "void *".
1983           Thanks to Chuck Gehr for this.
1985         * ace/OS.h: Removed #include <sys/param.h> to avoid problems on
1986           MVS.  Thanks to Chuck Gehr for this.
1988         * ace/config-sunos5.5-sunc++-4.1.h: It looks like SunC++ 4.1 still
1989           doesn't fix their template typedefs bugs.  So I've commented
1990           this out in the config file.  Thanks to Fred LaBar
1991           <flabar@fallschurch.esys.com> for reporting this.
1993         * ace/ACE.cpp (ldfind): Added support for a new feature that will
1994           append the default suffix (e.g., ".dll" or ".so") for a shared
1995           library on the current platform to the name of the file if it
1996           cannot find an suffix.  It will also check that a provided
1997           suffix will match the default suffix for that platform and if it
1998           doesn't it will produce a log entry with a warning.  This change
1999           will allow unified svc.conf-files for both UNIX and WinNT.
2000           Thanks to Tilo Christ <christ@swl.fh-heilbronn.de> for this.
2002         * ace/OS.cpp (thr_create): Came up with a remarkably clever scheme
2003           that should make it possible to utilize the ACE library *without
2004           change* on MVS, where the frigging C++ compiler requires all
2005           functions passed to pthread_create() have an extern "C" linkage.
2006           The trick was to generalize the thread adapter mechanism used
2007           for Win32.
2009         * ace/OS: Added a new macro called ACE_PTHREAD_CLEANUP_PUSH that
2010           selects the right mechanism (e.g., ace_spawn_adapter or not) for
2011           passing functions to pthread_cleanup_push().
2012         
2013         * ace/config-mvs.h: Added a new macro called ACE_HAS_THR_C_FUNC
2014           which expresses the fact that the MVS C++ compiler *must* have
2015           an extern "C" function passed to pthread_create().
2017         * ace/OS.h: Modified all uses of ACE_OS::mutex_lock_cleanup() to
2018           use the extern "C" ace_spawn_adapter() on platforms MVS like MVS
2019           that can't deal with non-C functions to pthread_create.  Thanks
2020           to Chuck Gehr for reporting this.
2022         * ace/OS.cpp (thr_create): Added Chuck Gehr's patches for MVS.
2024 Sun Nov 24 12:30:45 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2026         * ace: Added Chuck Gehr's <gehr@sweng.stortek.com> config-mvs.h
2027           file!
2029         * ace: Began adding support for WinSock 2.0.  Thanks to Luca for
2030           this.
2032         * ace/UPIPE_{Acceptor,Connector,Stream}: Updated the UPIPE
2033           components so that they keep a reference count that keeps track
2034           of the number of "owners" (which should always be 2 -- one for
2035           the connector-side and one for the acceptor-side).  By keeping
2036           this count, we can ensure that we don't close down the
2037           underlying ACE_Stream until both sides have called close().
2038           This will remove a nasty bug that was lurking in some of the
2039           tests.
2041         * ace/Message_Block.h: Added a new copy() method that assumes the
2042           buf passed in is a NUL-terminated string.
2044         * tests/UPIPE_SAP_Test.cpp: Modified this test so that threads
2045           exit in a well-defined order.  This should prevent problems on
2046           Win32.
2048         * ace/OS.i: Changed SIGNAL_SAFE_OS_CALLS to
2049           ACE_HAS_SIGNAL_SAFE_OS_CALLS to be consistent...
2051         * ace/config-vxworks*.h: Removed the SIGNAL_SAFE_OS_CALLS #define
2052           from the VxWorks config files.  There's no need to use this by
2053           default.
2055         * ace/Event_Handler: Moved all the default implementations of the
2056           virtual methods in ACE_Event_Handler from the *.i file to the
2057           *.cpp and made them no longer be inlines.  This will fix some
2058           problems with some compilers (e.g., MSVC++ 4.1) and is also more
2059           reasonable since there's really no purpose for inlining these
2060           virtual functions since they are rarely called.  Thanks to James
2061           Michael Dwyer <jdwyer@knox.edu> for reporting this problem.
2063 Sat Nov 23 12:39:03 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2065         * ace/Svc_Conf.y: Changed the parser so that it accepts DLL
2066           pathnames that lack *.dll or *.so suffixes.  This is necessary
2067           so that we can automatically append the correct suffix depending
2068           on the platform.  Thanks to Tilo Christ
2069           <christ@swl.fh-heilbronn.de> for suggesting this.
2071         * ace/Makefile: Updated the Makefile so that it will automatically
2072           insert the appropriate so that conditions for include of
2073           ace/OS.h can be checked correctly.
2075 Fri Nov 22 18:12:49 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2077         * ace/OS.i (thr_sigsetmask): DCE threads (at least as implemented
2078           by Digital) have no means for setting the signal mask on a
2079           per-thread basis.  Therefore, modified the code so that it
2080           correctly returns ACE_NOTSUP_RETURN(-1) for DCEthreads.  Thanks
2081           to Thilo Kielmann <kielmann@informatik.uni-siegen.de> for
2082           chasing this down.
2084         * performance-tests/Synch-Benchmarks/synch_driver.cpp (run_test):
2085           Fixed this implementation so that it will shut down correctly
2086           when a signal occurs or a timeout occurs (whichever comes
2087           first).
2089 Fri Nov 22 08:02:39 1996  Irfan Pyarali  <irfan@flamenco.cs.wustl.edu>
2091         * ace.{mdp,mak}: Changed ace.mak so that it links with the
2092           non-debug version of Microsoft's multithreaded dll when compiled
2093           with the release option
2095 Thu Nov 21 10:37:40 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2097         * ace/Service_Config: Changed the implementation of the
2098           Service_Config class so that it no longer inherits from
2099           ACE_Event_Handler.  This was causing problems because the new
2100           reactor() method in the ACE_Event_Handler was conflicting with
2101           the static reactor() method on ACE_Service_Config.
2103         * ace/OS.cpp (detach): Since we no longer use an
2104           ACE_Recursive_Thread_Mutex, we can remove the line 
2105           
2106           else if (ACE_TSS_Cleanup::lock_.get_nesting_level () > 1)
2107             // ...
2109           Thanks to Matthias Kerkhoff <make@cs.tu-berlin.de> for 
2110           reporting this.
2112         * ace/Thread_Manager.cpp (spawn_n): Replaced int i with size_t i
2113           to avoid warnings between signed and unsigned values.
2115         * ace: There is an easy way to speed up the "Update dependencies" 
2116           in MSVC. Just keep the the compiler from complaining about
2117           missing header by inserting a comment like below in the
2118           #include-directives which are not used in Win32.
2120           Therefore, instead of 
2122           #include <somefile.h>
2124           we use
2126           #include /**/ <somefile.h>
2128           Please let me know if this causes problems for any
2129           pre-processors.  Thanks to Matthias Kerkhoff
2130           <make@cs.tu-berlin.de> for this suggestion!
2132         * ace/OS.cpp: Added support for AfxBeginThread in
2133           ACE_OS::thr_create() and ACE_OS::exit().  Now ACE should work
2134           with MFC when you give the THR_USE_AFX flag to
2135           ACE_OS::thr_create()!  Thanks to Matthias Kerkhoff
2136           <make@cs.tu-berlin.de> for this!
2138         * ace/Malloc_T.cpp (avail_chunks): Changed the return value to
2139           ssize_t so we can return -1 if we can't get the lock.  Thanks to
2140           Tilo for reporting this.
2142         * ace/config-sunos4-sun3.x.h: Added new #ifdefs for Sun C++ 3.0.1
2143           on SunOS 4.1.3.  Thanks to Eric Parker <eparker@credence.com>
2144           for these fixes.
2146         * ace/Stack.h: Added a new method called peek() to the
2147           ACE_Unbounded_Queue classes so that the first element can be
2148           retrieved without removing it.  Thanks to Luca for this
2149           suggestion.
2151         * ace/SString.cpp (ACE_CString): Changed ACE_CString so that it
2152           uses memcpy() rather than str(n)cpy() so that we can store any
2153           structure into it.  Thanks to Luca for this suggestion.
2154   
2155         * ace/Acceptor: Since we moved the reactor() accessors to
2156           ACE_Event_Handler we can omit these from the Acceptor and
2157           Svc_Handler.
2159         * ace: Updated the ACE_Reactor and ACE_ReactorEx so that they
2160           automatically sets the pointers in ACE_Event_Handlers.  Thanks
2161           to Luca for this suggestion.
2163         * ace/Event_Handler: Added pointers to all the ACE demultiplexors
2164           (e.g., ACE_Reactor, ACE_ReactorEx, and ACE_Proactor) to
2165           ACE_Event_Handler, along with set/get accessor methods.  This
2166           supports a very common use-case where an event handler keeps
2167           track of its demultiplexor.  Thanks to Luca for this suggestion.
2169         * ace/OS.cpp: Since we do not use the recursion count from the
2170           Recursive Mutex any more in ACE_TSS_Cleanup::exit() we can
2171           replace the Recursive Mutex by a regular ACE_Thread_Mutex that
2172           is recursive on NT natively and more efficient.  Thanks to
2173           Detlef for suggesting this.
2175         * ace/OS.cpp: Since we do not use the recursion count from the
2176           Recursive Mutex any more in ACE_TSS_Cleanup::exit() we can
2177           replace the Recursive Mutex by a regular ACE_Thread_Mutex that
2178           is recursive on NT natively and more efficient.  Thanks to
2179           Detlef for suggesting this.
2181         * ace: Backed out all of Detlef's changes to ACE_OS and
2182           ACE_TSS::ts_get().  It turns out that this is unnecessary since
2183           he reimplemented ACE_TSS_Cleanup so that it no longer needs to
2184           hold the lock when callbacks are made.  Once again, Detlef
2185           proves that he's a macho man, not a boy ;-)
2187 Thu Nov 21 08:12:51 1996  David L. Levine  <levine@cs.wustl.edu>
2189         * include/makeinclude/platform_sunos5_sunc++_4.1.GNU:
2190           put back the LD definition
2192         * include/makeinclude/platform_osf1_4.0_g++.GNU:
2193           added LD definition to work with latest wrapper_macros.GNU
2195 Wed Nov 20 10:32:52 1996  Irfan Pyarali  <irfan@flamenco.cs.wustl.edu>
2197         * tests: Mutex_Test.cpp Priority_Buffer_Test.cpp
2198           Reader_Writer_Test.cpp Thread_Pool_Test.cpp were changed
2199           slightly to remove some compile time warnings.
2201 Wed Nov 20 21:35:28 1996  David L. Levine  <levine@cs.wustl.edu>
2203         * ace/Svc_Conf_l.cpp:  added #include of ace/config.h so that
2204           conditions for include of ace/OS.h can be checked.
2206 Wed Nov 20 02:38:40 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2208         * ace/Service_Config.cpp: Moved the definition of logger_key_ to
2209           OS.h and changed it to a macro (ACE_LOGGER_KEY) so that it will
2210           be portable to Win32 and UNIX.  Thanks to Tilo for reporting
2211           this.
2213         * ace/OS: Changed the return value of ACE_OS::getgid() from uid_t
2214           to gid_t to be POSIX compliant.
2216         * ace/OS.cpp (thr_create): Fixed a typo where we were assigning
2217           stacksize rather than size.  Thanks Thilo.
2219         * ace/OS.cpp (thr_create): Added a new piece of code for
2220           ACE_NEEDS_HUGE_THREAD_STACKSIZE, which is necessary to create a
2221           larger per-thread stack size in order to run ACE_Log_Msg::log.
2222           Thanks to Thilo for this.
2224         * tests/TSS_Test.cpp: Changed the name of the static variable
2225           "lock" to "cout_lock" to avoid a potential namespace clash on
2226           Digital UNIX.  Thanks to Thilo Kielmann for reporting this.
2228         * ace/SOCK_Dgram.cpp (recv): Added a cast (char *)
2229           io_vec->iov_base so that this would work correctly on platforms
2230           where iov_base is a void * (e.g., AIX and HP/UX).  Thanks to
2231           Alan Stewart for the change.
2233         * ace/OS.h: Added a few new changes for Digital UNIX 4.0a.  These
2234           should fix problems with ctime_r() and asctime_r().  Thanks to
2235           Dave Trumble for the fixes.
2237         * tests/UPIPE_SAP_Test.cpp: Disabled this test if we don't have
2238           threads and (STREAM Pipes or Win32).  Thanks to Thilo Kielmann's
2239           <kielmann@informatik.uni-siegen.de> for this info.
2241 Tue Nov 19 23:09:08 1996  Tim H. Harrison  <harrison@lambada.cs.wustl.edu>
2243         * ace/Log_Record.cpp (print): Added a call to ACE_OS::fflush
2244           before returning.  This change was suggested by Luca in order to
2245           help prevent messages from getting lost when applications exit.
2246           We're unsure of the affects this will have on performance, so we
2247           may change this back in the future.
2249 Tue Nov 19 00:06:57 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2251         * Released a beta version of ACE 4.0.33 for testing.
2253         * ace/TTY_IO.h: Added the ACE_Export macro before the ACE_TTY_IO
2254           class to make things work correctly for Win32 DLLs.  Thanks
2255           to William L. Gerecke <gerecke@rayva.org> for fixing this.
2257         * ace/OS.h: Improved the support for RLIMIT_NOFILE.  Thanks to
2258           Alan Stewart <axs2@osi.com> for reporting this.
2260         * ace/OS.h: Removed the following code from OS.h because
2261           it is causing problems on some platforms:
2263           #if (!defined (timespec) && !defined (m88k))
2264           #define timestruc_t struct timespec
2265           #endif /* timespec */
2267           Thanks to Fred LeBar for reporting this.
2269         * ace/OS.cpp (thr_create): Needed to create an
2270           ACE_OS::NULL_hthread so that we can assign the "NULL thread
2271           handle" on POSIX platforms.  Thanks to Alan Stewart
2272           <axs2@osi.com> for reporting this.
2274         * ace/OS.i: The HP/UX C++ compiler is unable to grok inline
2275           functions with multiple returns.  So I recoded the
2276           ACE_OS::event* methods to avoid this.  Thanks to Alan Stewart
2277           <axs2@osi.com> for reporting this.
2279         * ace/OS.h: Moved the "undef" of t_errno until after the inclusion
2280           of mman.h and dlfcn.h to prevent problems with DU4.0a.  Thanks
2281           to David Trumble <trumble@steosf.nio.dec.com> for reporting
2282           this.
2284         * ace/Pipe.cpp (open): Fixed a typo where
2285           this->ACE_SOCK::set_option() was being used instead of
2286           writer.set_option().  Thanks to Tilo Christ
2287           <christ@swl.fh-heilbronn.de> for reporting this.
2289         * ace/Message_Queue.h: Fixed a bug where 
2290         
2291           ACE_Message_Queue <ACE_SYNCH_1> &queue_;
2293           should be:
2295           ACE_Message_Queue <ACE_SYNCH_2> &queue_;        
2297           Thanks to Rick Orr <rorr@costello.den.csci.csc.com> for
2298           reporting this.
2300         * apps/Makefile: Updated the Makefile so that it no longer tries
2301           to look for Synch-Benchmarks.  Thanks to Amos Shapira
2302           <amos@dsi.co.il> for reporting this.
2304         * ace/Activation_Queue.cpp (dequeue): Added a sanity check to make
2305           sure that we actually deleted the first element in the queue.
2306           Thanks to Andres Kruse <Andres.Kruse@cern.ch> for reporting
2307           this.
2309         * include/makeinclude/platform_sunos5_sunc++_4.1.GNU: Added a
2310           minor change to remove the libACE.a archive prior to creating a
2311           new one.  This works around bugs with the SunOS 4.x C++
2312           compiler.  Thanks to Andres Kruse <Andres.Kruse@cern.ch> for
2313           reporting this.
2315         * ace/Malloc_T.cpp (avail_chunks): Added Fred LeBar's code and
2316           comments for computing the available chunks.
2318         * tests/Mutex_Test.cpp: Rewrote the Mutex_Test so that it behaves
2319           correctly on UNIX and Win32.  Thanks to Irfan for reporting the
2320           problem.
2322         * ace/Log_Msg.cpp (sync): Somehow, the statement that updated the
2323           pid_ after sync() is called following a fork() got removed, so I
2324           put it back in.
2326         * ace/config-sunos5.*-g++.h: Added the
2327           -D_REENTRANT flag to the config files for the G++ version of
2328           ACE. This fixes a nasty problem that otherwise arises when
2329           compiling on SunOS 5.x.  Thanks to Hanan Herzog
2330           <hanan@wallenda.stanford.edu> for reporting this.
2332 Tue Nov 19 21:14:15 1996  David L. Levine  <levine@cs.wustl.edu>
2334         * performance-tests/Synch-Benchmarks/Benchmark.{h,cpp}:
2335           use thread ID class for VxWorks as well as Pthreads.
2337         * OS.i, config-{osf1-4.0,sunos5.[45]}-g++.h: Moved GNU
2338           #include <cstring> out of config files and into OS.i.
2340         * ace/Svc_Conf_l.cpp: added #include of ace/OS.h for HPUX and
2341           VxWorks.
2343         * ace/Token.cpp: reordered initializations in Ace_Queue_Entry
2344           ctor to match declaration order.
2346 Mon Nov 18 00:47:27 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2348         * ace/OS.h: Added a new #define called ACE_HAS_BROKEN_CONVERSIONS
2349           to workaround problems with the HP/UX C++ compiler, which
2350           doesn't seem to be able to grok foo->operator T *().  Thanks to
2351           Alan Stewart <axs2@osi.com> for reporting this bug and the fix.
2352           Also updated the config-hpux*.h files with this define.
2354         * examples/Misc: Added a new test (test_get_opt.cpp) which
2355           exercises the ACE_Get_Opt class.
2357 Sun Nov 17 13:00:02 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2359         * ace/Get_Opt: Replaced the GNU-based implementation of class
2360           ACE_Get_Opt with an implementation based on BSD UNIX.  The
2361           advantage here is that the BSD version is not encumbered by the
2362           GNU GPL.  Thus, ACE has no more dependencies on GNU GPL.  Thanks
2363           to James Hu <jxh@cs.wustl.edu> for finding the BSD code.
2365 Mon Nov 18 00:13:25 1996  Tim H. Harrison  <harrison@lambada.cs.wustl.edu>
2367         * ace/stdcpp.h: Added this file to ACE.  This file contains the
2368           portability ugliness for the Standard C++ Library.  As
2369           implementations of the "standard" emerge, this file will need to
2370           be updated.  Although not very useful now, we are gearing up for
2371           a support for STL on UNIX and NT.
2373         * ace/OS.h: Added an include "ace/stdcpp.h".
2375         * ace/Log_Record.h (ACE_Log_Record): Removed the iostream include
2376           mess that got accidentally committed to the release.
2378 Sun Nov 17 00:13:25 1996  Tim H. Harrison  <harrison@lambada.cs.wustl.edu>
2380         * For some totally evil reason, MSVC++ will not allow any use of
2381           the "allocator" symbol.  It's an STL thing.  As a result, I've
2382           had to change all of the following files to rename allocator to
2383           alloc: Local_Name_Space_T.cpp, Map_Manager.cpp, Malloc_T.cpp,
2384           Message_Block.cpp, Read_Buffer.cpp, SString.cpp.  The root
2385           of the problem can be seen by compiling the code below:
2386           
2387           template <class TYPE>
2388           class foo {};
2390           int foo;  // compile error because of the foo<> class.
2392           int main () { return 0; }
2393         
2394         * Service_Config.{h,cpp}:  We have to change the allocator
2395           accessors to alloc.  This is probably going to break
2396           many things.  If necessary, we can conditionally compile in the
2397           old accessors for platforms that are not using STL and MSVC++.
2399         * ace/Task.h:  Added ACE_Export macros to the class definitions.
2401 Sun Nov 17 13:00:02 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2403         * ace: Added Thilo Kielmann's <kielmann@informatik.uni-siegen.de>
2404           patches for OSF/1 4.0a.
2406         * ace/OS: Revised the implementation of ACE_OS::asctime_r() and
2407           ACE_OS::ctime_r() to simplify common cases.  However, this may
2408           have broken some code on OSF/1 4.0a.  Can someone please check
2409           this?
2411         * tests/SPIPE_Test.cpp: Conditionally compiled this file so that
2412           we only build the SPIPE test if (1) we're running on Win32 or
2413           (2) ACE_HAS_STREAM_PIPES.  Thanks to David Levine for this
2414           suggestion.
2416         * ace/OS.i (ctime_r): Fixed a typo that was caused by a misplaced
2417           #endif.  Thanks to Eshel Liran <liran@macs.biu.ac.il> for
2418           reporting this.
2420         * ace/Time_Value: Disabled ACE_TRACE within these method in order
2421           to prevent infinite recursion.
2423         * ace/Log_Record: Originally, when verbose mode was enabled you
2424           can get the date and time down to the seconds.  However, it is
2425           useful for performance testings to have milliseconds displayed
2426           in the log.  To accomplish this, I changed ACE_Log_Msg and
2427           ACE_Log_Record to they also keep track of and print the microsec
2428           time, as well.  Thanks to Luca for suggesting this.
2430         * ace/Map_Manager.cpp: updated all the ACE_Map_Manager methods so
2431           their read and write Guards use the ACE_*_GUARD macros.
2433         * ace/Malloc_T.cpp: Updated all the ACE_Malloc methods so their
2434           read and write Guards use the ACE_*_GUARD macros.
2436         * ace/OS.cpp (svc_run): Added an ACE_DEBUG announcing that an
2437           exception has propagated beyond the outermost svc_run()
2438           function.  Thanks to Luca for this suggestion.
2440         * tests/test_config.h: VxWorks passes in a NULL argv (arrghhh...).
2441           Therefore, to work around this in the ./tests directory, I changed
2442           the ACE_START_TEST macro to take a NAME parameter, and then I
2443           added the following local variable:
2445           const char *program = argv ? argv[0] : NAME;
2447           Thanks to David Levine for this fix.
2449 Sat Nov 16 12:01:08 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2451         * examples/Threads/test_tss2.cpp: Added Detlef's new test for
2452           ACE_TSS.
2454         * ace/Synch_T.cpp (ts_get): Added Detlef's changes to fix deadlock
2455           problems with ACE_TSS on NT.
2457 Fri Nov 15 18:01:26 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2459         * ace/ACE_SOCK_Stream.cpp: NT will signal an abortive close
2460           to the opposite party if a socket is closed before all of its
2461           data has been sent out. According to the NT SDK-docs, you should
2462           do a shutdown before the closesocket() in order to prepare a
2463           graceful close.  Thus, I've placed an
2464           ACE_SOCK_Stream::close_writer() method just before the call to
2465           ACE_SOCK::close() in the new close() of the ACE_SOCK_Stream
2466           class.  Thanks to Tilo Christ <christ@swl.fh-heilbronn.de> for
2467           this suggestion.
2469         * ace/INET_Addr.cpp: The function ACE_INET_Addr::addr_to_string
2470           was a virtual function that is also inline and defined in the .i
2471           file.  Some compilers have a problem with this, so I moved it
2472           into the *.cpp file.  In addition, its sister function was also
2473           virtual and is defined as:
2475           ACE_INLINE int
2476           ACE_INET_Addr::string_to_addr (const char s[])
2478           in the .cpp file.  I removed the ACE_INLINE directive.  Thanks
2479           to Fred LaBar <flabar@fallschurch.esys.com> for reporting this.
2481 Thu Nov 14 16:20:20 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2483         * ace/Malloc_T.cpp: Added a new method to ACE_Malloc that will
2484           return the number of chunks available on the free list.  Thanks
2485           to Fred Labar <flabar@fallschurch.esys.com> for this.
2487 Wed Nov 13 01:22:16 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2489         * ace/ReactorEx.cpp (handle_events):  I've changed siginfo_t on
2490           Win32 (which was previously typedef'd to int) so that it has the
2491           following structure: 
2493           struct siginfo_t
2494           {
2495             siginfo_t (ACE_HANDLE handle);
2497             ACE_HANDLE si_handle_;
2498             // Win32 HANDLE that has become signaled.
2499           };
2501           Then, I've changed the ACE_ReactorEx::handle_events() method to
2502           look like this:
2504             // Assign the ``signaled'' HANDLE so that callers can get
2505             // it.
2506             siginfo_t sig (relative_handles[relative_index]);
2507             
2508             if (relative_handlers[relative_index]->handle_signal 
2509                 (0, &sig) == -1)
2511           Thus, you can refer to the signaled handle as 
2513           si_handle_
2515           within the handle_signal() call back.  Thanks to Matthias
2516           Kerkhoff <make@cs.tu-berlin.de> for suggesting this.
2518         * ace/System_Time.h: Made ACE_System_Time::get_local_time() a
2519           static member function.  Thanks to Matthias Kerkhoff
2520           <make@cs.tu-berlin.de> for suggesting this.
2522         * ace/Message_Queue.h: The internal variables for counting the
2523           bytes stored in the queue were declared as of type int (in
2524           Message_Queue.h).  But they are set (e.g. with
2525           ACE_Message_Queue::ACE_Message_Queue) with values of size_t.
2527           When running tests/Priority_Buffer_Test, the high_water_mark_ is
2528           preset with the value LONG_MAX. While assigning this value from
2529           size_t to int, this becomes -1 and the queue is always believed
2530           to be full :-( The fix is to change the internal data structures
2531           in Message_Queue.h from int to size_t.  Thanks to Thilo Kielmann
2532           <kielmann@informatik.uni-siegen.de> for reporting this.
2534         * tests: Fixed problems with the following three tests:
2536           Priority_Buffer_Test.cpp
2537           Reader_Writer_Test.cpp
2538           UPIPE_SAP_Test.cpp
2540           When these are compiled with gcc on Digital UNIX 4.0a the static
2541           ACE_Thread_Manager thr_mgr; was never getting initialized due to
2542           gcc compiler bugs.  The fix is to replace the static thread
2543           manager with the ACE_Service_Config::thr_mgr() singleton.
2544           Thanks to Thilo Kielmann <kielmann@informatik.uni-siegen.de> for
2545           reporting this.
2547 Tue Nov 12 19:43:12 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2549         * ace/Thread_Manager.cpp (spawn_n): Was missing a 0 after ?.
2550           Thanks to Thilo Kielmann <kielmann@informatik.uni-siegen.de> for
2551           reporting this.
2553         * ace/Log_Msg.h: Created a new macro call ACE_ERROR_BREAK(X) {
2554           ACE_ERROR(X); break;} for use within switch and loop statements.
2555           Thanks to Luca for this idea.
2557         * ace/Pipe.cpp: Enabled the "reuse addr" flag for accepting and
2558           connecting the Win32 version of ACE_Pipe.  Thanks to Luca for
2559           reporting this problem.
2561         * ace/OS.i (thr_join): ACE_Thread::join () has a default second
2562           parameter (the status) set to 0. This is not handled in
2563           ACE_OS::thr_join(). To avoid getting a system error in NT we
2564           handle this as we did with ACE_OS::thr_create() and the
2565           thr_handle parameter.
2567         * ace/config-irix6.2-sgic++.h: Updated the set of patches required
2568           for IRIX 6.2.  Thanks to Amos Shapira for reporting this.
2570 Sun Nov 10 15:40:17 1996  Tim H. Harrison  <harrison@lambada.cs.wustl.edu>
2572         * ace/Token_Invariants.cpp: Moved static data
2573           declarations out of ACE_Token_Invariant_Manager::instance and
2574           into the header file.  This is supposed to help with a g++
2575           problem on VxWorks.
2577 Sun Nov 10 13:22:03 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2579         * ace/Pipe.cpp (open): Set the loopback socket into TCP_NODELAY
2580           mode so that we don't block for 200 ms...  Thanks to Luca
2581           Priorelli <lucapri@mbox.vol.it>.
2583         * ace/Thread_Manager: Created a new version of spawn_n() that
2584           gives parameters for stack, stack_size, and also for the
2585           assigned ACE_hthread_t's.  Thanks to Thilo Kielmann
2586           <kielmann@informatik.uni-siegen.de> for suggesting this.
2588 Sun Nov 10 13:56:38 1996  Prashant Jain  <pjain@merengue.cs.wustl.edu>
2590         * tests/Reactors_Test.cpp (main): Fixed the test so that the
2591           output of the test goes to a log file instead of STDOUT.
2593 Sat Nov  9 11:23:13 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2595         * ace/Synch.i: Fixed a bug in ACE_Thread_Mutex_Guard.
2596           The call:
2598           this->owner_ == block ? this->lock_.acquire () : this->lock_.tryacquire ();
2600           should be
2602           this->owner_ = block ? this->lock_.acquire () : this->lock_.tryacquire ();
2604           Thanks to Alexander Smundak <sasha@migration.com> for reporting
2605           this.
2607 Sat Nov  9 01:44:15 1996  Irfan Pyarali  <irfan@flamenco.cs.wustl.edu>
2609         * ace/Message_Queue: Added forward and reverse iterators to
2610           Message_Queue. Also, added typedefs to Message_Queue for
2611           ITERATOR, and REVERSE_ITERATOR. This makes the Queue like an STL
2612           collection and also makes it easier to use since you don't have
2613           to define types for the iterators. Please see
2614           test/Message_Queue_Test.cpp for an example.
2616         * ace/Map_Manager: Added reverse iterator to Map_Manager. Also,
2617           added typedefs to Map_Manager for ENTRY, ITERATOR, and
2618           REVERSE_ITERATOR. This makes the Map more like an STL collection
2619           and also makes it easier to use since you don't have to define
2620           types for the iterators and the entry. Please see
2621           test/Map_Manager_Test.cpp for an example. Note that the new
2622           typedefs does not break existing code.
2624 Fri Nov  8 20:04:26 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2626         * ace/Malloc.h: Fixed a typo on line 176 that reads:
2628           #include "ace/Sync_T.h"
2630           It should read:
2632           #include "ace/Synch_T.h" 
2634           Thanks to Todd Barkalow <todd_barkalow@stortek.com> for
2635           reporting this.
2637 Wed Nov  6 00:38:02 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2639         * ace/Pipe: Added the const qualifier to the following methods:
2640         
2641           ACE_HANDLE ACE_Pipe::read_handle (void) const;
2642           ACE_HANDLE ACE_Pipe::write_handle (void) const;
2644           Thanks to Luca for reporting this.
2646         * ace/config-win32-msvc4.0.h: Redefined
2647           ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES since it looks like
2648           MSVC++ 4.0 still doesn't work.  Maybe this is fixed in 4.2?
2650 Tue Nov  5 03:09:44 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2652         * ace/Strategies.cpp: I'd forgotten to update one of the
2653           accept(*svc_handler) calls to use the new
2654           accept(svc_handler->peer()) syntax.
2656         * netsvcs/lib/Server_Logging_Handler.cpp: Added a cast to
2657           (COUNTER) 0 when initializing ::request_count_ to avoid problems
2658           on Win32.  Thanks to Luca for pointing this out.
2660         * ace/Thread_Manager: Added a new thr_self() method that return
2661           the unique ID of the thread.  This is not strictly necessary
2662           (because a thread can always just call <ACE_Thread::thr_self>).
2663           However, we put it here to be complete.  Thanks to Hamutal Yanay
2664           <Hamutal_Yanay@mail.icomverse.com> for suggesting this.
2666         * ace/OS.cpp (thr_create): I was accidentally closing down
2667           ::CloseHandle (thr_handle) (where thr_handle is a HANDLE *) when
2668           I should have been doing a ::CloseHandle (handle) instead.
2669           Thanks to Luca for finding this!
2671 Tue Nov  5 14:26:32 1996  David Levine  <levine@cs.wustl.edu>
2673         * include/makeinclude/wrapper_macros.GNU: Changed LINK.{c,cc}
2674           commands to use LD instead of CXX.  Changed all platform macros
2675           files (except for g++ on VxWorks) to correspond.
2677         * tests/run_tests.sh: changed -e test to -f for portability and
2678           reordered tests.  Thanks to Michael Michael Rueger
2679           <m_rueger@SYSCOMP.DE> for originally creating run_tests.sh, and
2680           for maintaining it, and to Alan Stewart <axs2@osi.com> for
2681           suggesting fixes/enhancements.
2683         * tests/Time_Service_Test.cpp and Tokens_Test.cpp: changed to
2684           return 0 on success instead of 42
2686 Fri Nov  1 03:53:39 1996  Irfan Pyarali  <irfan@flamenco.cs.wustl.edu>
2688         * STL: Added STL files to $WRAPPER_ROOT/STL.  This code is a
2689           modified version (changes for VC++ compiler) of the publicly
2690           available implementation of STL from HP.  Currently,
2691           ACE_Registry uses these STL classes.
2693 Fri Nov  1 00:25:01 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2695         * ace/CORBA_Handler.cpp (process_events): There was a very subtle
2696           race condition in the ACE_MT_CORBA_Handler.  process_events()
2697           accessed the singleton directly without taking the mutex. At
2698           startup the process_event thread is kicked off from the
2699           constructor and the instance_ is set. Hence the race.  The
2700           solution is to attempt to take the mutex before accessing the
2701           instance.  Thanks to David Artus <david.artus@sbil.co.uk> for
2702           reporting the problem and providing the fix.
2704         * ace/Log_Msg.cpp (log): Improved the performance of the Log_Msg
2705           mechanism by not doing any parsing of the format string if the
2706           user has disabled this priority.
2708         * ace/Reactor.cpp: Added a chance for the open() method of the
2709           Notification_Pipe failing.  Thanks to Luca for pointing this
2710           out.
2712         * ace/Reactor.cpp (handle_events): Added a change to the semantics
2713           of the ACE_Reactor so that it doesn't fall out of the event loop
2714           when signals arrive that it handles.  Thanks to Stuart Powell
2715           <stuartp@in.ot.com.au> for this fix.
2717         * ace/Service_Repository.cpp (remove): Fixed a bug with
2718           Service_Record::remove() that was failing if there were only two
2719           records and we are removing the first one.  Thanks to Alex
2720           Villazon <villazon@cui.unige.ch> for reporting this.
2722         * ace: Recompiled everything on Solaris with G++ and CC and it
2723           seems to work fine.
2725         * ace/Module: Replaced the use of char * with const char * for
2726           assigning the Module a name.
2728         * ace: Split the Task.{cpp,i.h} file into Task_T.{cpp,i,h} in
2729           order to factor out the new non-template ACE_Task_Base and
2730           ACE_Task_Exit classes.  This is required for GCC-based compilers
2731           that include the *.cpp files...
2733 Thu Oct 31 00:36:38 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2735         * ace/Malloc_T.h: Made the destructor of ACE_Allocator_Adapter
2736           virtual.
2738         * ace/Thread: Reorganized the ACE_Thread so that the
2739           ACE_HAS_THREADS #ifdef is no longer required...
2741         * ace/Strategies.h: Changed all the destructors to be virtual so
2742           that G++ will stop complaining...
2744         * ace/Thread_Manager: Reorganized the ACE_Thread_Manager so that
2745           the ACE_HAS_THREADS #ifdef is no longer required...
2747         * ace/config-win32-msvc4.0.h: Added Dieter Quehl's great hack to
2748           get ACE to compile correctly on Win32 with MFC!
2750         * ace/Task: I've rearranged the implementation of ACE_Task<> 
2751           in the following way:  
2753              1. Defined a non-template class ACE_Task_Base from which the 
2754                 ACE_Task<...> inherits (instead of inheriting from
2755                 Ace_Service_Object, which ACE_Task_Base now inherits from.
2756      
2757              2. Move all methods that don't depend on the <ACE_MT_SYNCH> or
2758                 <ACE_NULL_SYNCH> modifers from the ACE_Task template to
2759                 ACE_Task_Base.
2761           There are two motivations for making this change:
2763              1. It reduces ``template bloat'' by factoring out common
2764                 code that can be shared between ACE_Task<ACE_MT_SYNCH>
2765                 and ACE_Task<ACE_NULL_SYNCH>.
2767              2. It makes it possible for the Thread_Manager to use 
2768                 ACE_Task_Base *'s for managing groups of ACE_Tasks
2769                 in a fully polymorphic manner.
2771           Note that the new changes don't break any existing code that
2772           uses ACE_Task.  Thanks to Hamutal Yanay
2773           <Hamutal_Yanay@hub.comverse.com> and Ari Erev's
2774           <Ari_Erev@comverse.com> for suggesting these changes.  
2776         * ace/Thread_Manager: Changed the use of ACE_Task<ACE_SYNCH> to
2777           ACE_Service_Object because this avoids nasty problems with
2778           template type conflicts.  The right solution is probably to
2779           create a new non-template base class for ACE_Task called
2780           ACE_Task_Base and move all the ACE_Task operations into there
2781           that don't involve the Message_Queue directly.  I'll need to
2782           think more about this...
2784         * ace/SOCK_Stream: Added new timed send_n() and recv_n() methods,
2785           which use the underlying timed ACE::send() and ACE::recv()
2786           calls.
2788         * ace/ACE.cpp: Added new timed send_n() and recv_n() methods,
2789           which use the underlying timed ACE::send() and ACE::recv()
2790           calls.
2792 Wed Oct 30 00:27:21 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2794         * ace/OS.h: Changed MAXHOSTNAMELEN on Win32 from
2795           (MAX_COMPUTERNAME_LENGTH+1) (which is around 16 or so) to 256.
2796           Thanks to Tilo Christ <christ@swl.fh-heilbronn.de> for this
2797           suggestion.
2799         * ace: Made #define STRICT a compile time option if the
2800           ACE_HAS_STRICT flag is enabled.  This prevents ACE from breaking
2801           existing application (i.e., non-ACE) code.  Thanks to Karlheinz
2802           for pointing this out!
2804         * ace/Synch_T.cpp: Fixed a typo in ACE_Condition<MUTEX>::wait
2805           (void).
2807           return ACE_OS::cond_wait (&this->cond_, this->mutex_.lock_);
2809           should read 
2811           return ACE_OS::cond_wait (&this->cond_, &this->mutex_.lock_);
2813           Thanks to Dieter Quehl <dietrich.quehl@med.siemens.de> for
2814           reporting this!
2816         * ace/Svc_Handler.h: Removed the operator ACE_PEER_STREAM &() from
2817           the ACE_Svc_Handler class since we don't need it anymore due to
2818           the changes below.
2820         * ace/{Acceptor,Connector}.cpp: Removed the use of operator
2821           ACE_PEER_STREAM &() in the Acceptor::accept() and
2822           Connector::connect() code and replaced it with
2823           svc_handler->peer().  This works much better and is more
2824           intuitive.
2826 Wed Oct 30 00:30:00 1996  Irfan Pyarali  <irfan@flamenco.cs.wustl.edu>
2828         * Registry: Added a Name Service implementation to ACE based on
2829           Win32 Registry. The ACE_Registry interface is inspired by the
2830           interface specified in the CORBA Naming Service Specification.
2831           The implementation is done through Win32 Reg*() functions.
2832           Other than providing an OO wrapper for the Win32 Reg*()
2833           functions, ACE_Registry provides an abstraction for iteration
2834           over the elements of the Registry. This only works on Win32
2835           platforms (unless you are brave enough to reimplement the
2836           Win32 Registry API on UNIX and link it in underneath ACE!).
2838         * ace/Local_Name_Space_T.cpp: Moved SEH out of methods of
2839           Name_Space_Map to the methods of Local_Name_Space. Some of
2840           the calls to Local_Name_Space methods used the allocator to
2841           either malloc or find or free shared memory. Adding SEH to these 
2842           methods ensured that any exception raised due to remapping would
2843           be caught and handled appropriately. 
2845           Also, to fool the stupid MFC compiler, we added _i methods
2846           so that it stopped bitching about destructors not getting called
2847           correctly. 
2849         * Added three new tests to /examples/Naming. Thanks to Lothar for
2850           providing these tests.  
2852 Tue Oct 29 18:10:09 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2854         * ace/ACE.cpp (send): Integrated a new and simpler version of
2855           timed ACE::send().  Thanks to Vital Aza <va3@cs.wustl.edu> for
2856           coming up with this.
2858         * ace/XtReactor.cpp: When the ACE_Reactor is constructed it
2859           creates the notify pipe and registers it with the attach()
2860           method. The XtReactor overloads this method BUT because the
2861           attach occurs when constructing the base class ACE_Reactor, the
2862           ACE_Reactor attach() is called not the XtReactor attach().  This
2863           means that the notify pipe is registered with the ACE_Reactor
2864           event handling code not the XtReactor and so notfications don't
2865           work.  To get around this we simply close and re-opened the
2866           notification handler in the constructor of the XtReactor.
2867           Thanks to Rodney Skinner <rods@in.ot.com.au> for this fix.
2869         * ace/XtReactor.cpp (schedule_timer): The ACE_Reactor returns a
2870           timer_id from it's equivalent call but the XtReactor always
2871           returns 0.  To fix this we simply replaced the "return 0;" in
2872           the function with "return result;" Thanks to Rodney Skinner
2873           <rods@in.ot.com.au> for reporting this.
2875 Tue Oct 29 00:02:44 1996  Douglas C. Schmidt  <schmidt@lambada.cs.wustl.edu>
2877         * ace/config-win32-msvc4.0.h: Defined the STRICT symbol based on a
2878           suggestion from Luca.  STRICT type checking in WINDOWS.H
2879           enhances type safety for Windows programs by using distinct
2880           types to represent all the different HANDLES in Windows. So for
2881           example, STRICT prevents you from mistakenly passing an HPEN to
2882           a routine expecting an HBITMAP.  Note that if you have STRICT
2883           type checking enabled in one file, but not in another, the C++
2884           compiler will generate different external link symbols for a
2885           single function. This will result in link-time errors If you are
2886           mixing STRICT and non-STRICT code, you must be aware of linkage
2887           inconsistencies. In general, all MFC programming and all C++
2888           should be done with STRICT. If you have legacy C code, then not
2889           using STRICT is acceptable
2891         * ace/OS.cpp (thr_create): Added a special check for the situation
2892           where we have both ACE_HAS_PTHREADS and ACE_HAS_STHREADS
2893           defined.  In this case, we are running on Solaris, where
2894           ACE_thread_t and ACE_hthread_t are the same.  Therefore, we can
2895           copy the value of the *thr_id into the *thr_handle.  This
2896           ensures that the ACE_Thread_Manager behaves correctly with
2897           respect to suspending and resuming threads and ACE_Tasks.
2899         * ace/Trace.cpp (ACE_Trace): Changed the use of LM_DEBUG to
2900           LM_TRACE in the constructor and destructor.  Thanks to Luca for
2901           this!
2903         * ace/OS.i: Added a cast to of (HMODULE) handle so that the STRICT
2904           macro would work correctly for Win32.  Thanks to Luca for this.
2906         * ace/config-win32-msvc4.0.h: According to Luca, ACE compiles file
2907           with ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES undefined on NT.  So
2908           I undefined it!  If there are any problems with this, please let
2909           me know.
2910           
2911         * ace/SOCK_Dgram: Added Luca Priorelli <lucapri@mbox.vol.it>
2912           implementation of recv() for SOCK Dgrams that allows clients to
2913           read from a socket without having to provide a buffer to read.
2915         * examples/Threads/test_task_four.cpp: This is a new test
2916           program to test the new interfaces.  Thanks to Hamutal Yanay
2917           & Ari Erev for this.
2919         * tests/test_config.h: Added a call to the new ACE_OS::mkdir()
2920           wrapper to create the log directory if one doesn't already
2921           exist.  This should solve some nasty problems with NT reported
2922           by Tilo Christ <christ@swl.fh-heilbronn.de>.
2924         * ace/OS.h: Added a new macro ACE_DEFAULT_DIR_PERMS and changed
2925           the spelling of the existing ACE_DEFAULT_PERMS to
2926           ACE_DEFAULT_FILE_PERMS, which is more accurate.
2928 Mon Oct 28 21:35:12 1996  Douglas C. Schmidt  <schmidt@lambada.cs.wustl.edu>
2930         * ace/OS.h: Added a wrapper for the mkdir() system call.  We need
2931           it for some of the tests.
2933         * ace/Task: Changed the name of ACE_Task_Exit<>::set_this() to
2934           ACE_Task_Exit<>::set_task().  Thanks to Hamutal Yanay & Ari Erev
2935           for suggesting this.
2937         * ace/{Task,Thread_Manager}: Integrated Hamutal
2938           <Hamutal_Yanay@hub.comverse.com> Yanay & Ari Erev's
2939           <Ari_Erev@comverse.com> enhancements to add ACE_Task support
2940           to the ACE_Thread_Manager.  This allows the ACE_Thread_Manager to
2941           know about ACE_Tasks directly, rather than knowing
2942           indirectly via their lower-level thread IDs.  The changes
2943           are described below:
2945            - Added a parameter to the activate() method. It is used to
2946              pass an ACE_Task* to spawn_n().
2948            - Modified suspend() and resume() to call
2949              thrMgr->suspend_task() and thrMgr->resume_task() instead of
2950              thrMgr->suspend_grp() and thrMgr->resume_grp().
2952            - Added an ACE_Task * parameter to spawn_n().
2954            - Added an ACE_Task * parameter to append_thr().
2956            - append_thr() uses the ACE_Task * input parameter to
2957              initialize the thread descriptor.
2959            - Added the following methods:
2960                apply_task()
2961                suspend_task()
2962                resume_task()
2963                kill_task()
2964                resume_task()
2965                cancel_task()
2966                find_task()
2968                num_tasks_in_group()
2969                num_threads_in_tasks()
2971                task_list()
2972                thread_list()
2973                hthread_list()
2975                set_grp() Like the current set_grp() but gets an ACE_Task *
2976                          as input. 
2977                get_grp() Like the current set_grp() but outputs an
2978                          ACE_Task *. 
2980                wait_task() 
2981                wait_group()
2983 Sun Oct 27 11:25:00 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
2985         * ace/OS: modified the ACE_OSCALL_RETURN macro so that we'll
2986           no longer have zillions of warnings about _result not
2987           used...
2989         * ace/Synch_T: Changed the use of ACE_Mutex for ACE_TSS to
2990           ACE_Thread_Mutex.
2992         * ace: Added the necessary template specializations to get ACE
2993           compiled correctly with G++.
2995         * ace/Log_Msg.h: There were some places in the ACE_{DEBUG,ERROR}
2996           macros that should have been using __ace_error but there still
2997           using errno (which is wrong since this might be changed due to
2998           side-effects of calling ACE_Log_Msg::instance()).  I found this
2999           problem due to the use of -Wall with G++!  As a result of this
3000           fix, ACE now compiles much more cleanly with gcc -Wall.
3002         * ace/Strategy: Improved the scheme used to define the PEER_ADDR
3003           type of the ACE_Accept_Strategy so that it will work correctly
3004           on platforms whose C++ compilers aren't quite up to handling all
3005           variants of template typedefs.  In particular, many platforms
3006           don't support the use of template typedefs in parameter names...
3008         * ace/OS: HP/UX omitted the const in the prototype of
3009           const_timewait().  Therefore, I added a new typedef to handle
3010           this and updated all the HP/UX config*.h files.
3012         * ace: Added a new config file (config-sunos5.5-sunc++-4.1.h)
3013           which reflects the fact that SunC++ 4.1 fixes template bugs that
3014           prevented earlier versions from supporting template typedefs
3015           correctly.  The new config file #defines
3016           ACE_HAS_TEMPLATE_TYPEDEFS.
3018 Sat Oct 26 02:22:25 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3020         * ace: On the advice of David Levine, I compiled ACE with gcc
3021           -Wall and started to fix lots of minor warnings (e.g.,
3022           misordered data member initializations).
3024         * ace/Local_Tokens.h: Changed the destructors of ACE_Mutex_Token,
3025           ACE_RW_Token, ACE_Token_Proxy, and ACE_RW_Token to be virtual.
3027         * ace/Synch_T.h: Changed the destructor of ACE_TSS to be virtual.
3029         * ace/OS: Changed the prototype of ACE_OS::select() so that it
3030           uses const ACE_Time_Value *.
3032         * Updated all uses of ACE_Malloc to use the new ACE_*_MEMORY_POOL
3033           #defines.  This makes it possible to use the ACE_Malloc<> scheme
3034           with lame C++ compilers.
3036         * ace/ACE: Changed the interface of the new timed send/recv calls
3037           to use ACE_Time_Value *, which makes it easier to determine
3038           the blocking semantics at runtime.  Thanks to Bill Fulton
3039           <bill@fasttrack2.bscc.bls.com> for suggesting this.
3041 Sat Oct 26 15:55:02 1996  Irfan Pyarali  <irfan@flamenco.cs.wustl.edu>
3043         * ace/OS.h: We determined that MSVC++ is capable of supporting
3044           template typedefs.  Therefore, we can enable the
3045           ACE_HAS_TEMPLATE_TYPEDEFS flag, which makes life much easier for
3046           end users!
3048 Fri Oct 25 23:16:16 1996  Irfan Pyarali  <irfan@flamenco.cs.wustl.edu>
3050         * examples/Shared_Malloc/test_multiple_mallocs.cpp: Added a new
3051           test that demonstrates the new ability of ACE_Malloc<> to to
3052           handle multiple mallocs rooted at different base addresses.
3054         * ace/Memory_Pool: Fixed this stuff so that it works even when C++
3055           compilers can't grok template typedefs.
3057         * ace: Put all the macros that handle the fact that many C++
3058           compilers have broken template implementations into one place
3059           (OS.h), rather than having this spread out in many files.
3061         * In ACE_MMAP_Memory_Pool::init_acquire (), we reset errno to 0 in
3062           the case where the file already exists (and errno == EEXIST).
3064         * Added an ACE_*_Memory_Pool_Options class to each Memory Pool
3065           class. The Options class allows detailed parameters to be passed
3066           to the constructor of the Memory Pool class. Since a typedef'd
3067           Options class was added to every Memory Pool class, this gave us
3068           the ability to use traits in ACE_Malloc and
3069           ACE_Allocator_Adapter to construct generic Memory Pools that can
3070           be initialized uniquely for each instance of ACE_Malloc.  Note
3071           that this new feature only works for C++ compilers that support
3072           template typedefs correctly (e.g., MSVC++ 4.x, SunC++ 4.1,
3073           and the AIX C++ compiler).
3075         * Added additional constructors to ACE_Malloc and
3076           ACE_Allocator_Adapter to allow Options to be passed in to Memory
3077           Pool.
3079         * Added an extra field in ACE_Name_Options which allows
3080           specification of the base address of the memory pool. This is
3081           now used by ACE_Local_Name_Space::create_manager() to create an
3082           ACE_Allocator_Adapter.  This now allows us to have multiple
3083           ACE_Naming_Context simultaneously in the same process address
3084           space.
3086         * Also added error checking for constructors (in
3087           ACE_Local_Name_Space and ACE_Malloc) by checking errno
3088           values. This is a "hack" since we currently do not use exception
3089           handling.
3091 Thu Oct 24 02:43:11 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3093         * examples/Connection/misc/Makefile: The Makefile in
3094           ACE_wrappers/examples/Connection/misc seems to have been
3095           truncated.  I replaced it.  Thanks to Alan Stewart
3096           <axs2@osi.com> for reporting this.
3098         * examples/IPC_SAP/SOCK_SAP/CPP-{inclient,inserver}.cpp: Updated
3099           these examples to use the new timed send()/recv() operations.
3101         * ace/SOCK_IO: Added timed send()/recv() methods, using the base
3102           level implementations in class ACE.
3104         * ace/ACE: Added timed send()/recv() methods.
3106 Wed Oct 23 19:56:45 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3108         * examples/IPC_SAP/SOCK_SAP/CPP-inclient.cpp (main): Changed the
3109           behavior of the test program so that it doesn't take a
3110           local_addr, but rather will use the default (this prevents a
3111           common problem that happens when users run the test without
3112           reading the README file).
3114         * ace/ACE.cpp: Added a new method (get_flags) that returns the
3115           current setting of flags associated with handle.
3117         * Start of a brave new world: ACE is now under CVS version
3118           control...  Thanks to David Levine and Chris Cleeland
3119           for making this happen.
3121 Sat Oct 19 12:33:56 1996  David L. Levine  <levine@cs.wustl.edu>
3123         * added ACE threads mappings to VxWorks 5.2 tasks in OS.*.
3124           NOTE:  this is _untested_ at this point, but only affects
3125           VxWorks code
3127         * changed name of first argument of ACE_OS::sigprocmask() and
3128           ACE_OS::thr_sigsetmask() from "signum" to "how" to better
3129           represent what it really is.
3131 Wed Oct 16 01:59:40 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3133         * ace/Log_Record.cpp (print): added Luca's suggestion for checking
3134           if host_name == 0 for the ostream version of print(), as well.
3136         * Released version of ACE 4.0.32 for testing.
3138         * ace/Synch.h: Added many small fixes for HP/UX 10.x.  Thanks to
3139           Alan Stewart <axs2@osi.com> for providing these.
3141         * ace/OS.h: Added many new ACE_LACKS* and ACE_HAS* macros to
3142           support the MVS port.  Thanks to Chuck Gehr
3143           <gehr@sweng.stortek.com> for these.
3145 Tue Oct 15 11:56:59 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3147         * ace/OS.h: in a continuing effort to protect the ACE namespace,
3148           I've changed ace/OS.h around lines 127-137 so that "SYNCH" and
3149           "SYNCH_MUTEX", etc. are prefixed with "ACE_".  Thanks to Alan
3150           Stewart <axs2@osi.com> for suggesting this.
3152         * ace/Local_Tokens.h: Removed an unnecessary parameter name
3153           that was unused.   Thanks to Stuart Powell <stuartp@in.ot.com.au>
3154           for reporting this.
3156 Tue Oct 15 17:03:37 1996  Tim H. Harrison  <harrison@lambada.cs.wustl.edu>
3158         * ace/ReactorEx.cpp (handle_events): Fixed a bug in handle_events
3159           so that the correct handlers get called when multiple handles
3160           become signaled simultaneously.  Thanks to Ari Erev
3161           <Ari_Erev@comverse.com> for pointing out this bug.  I also took
3162           this opportunity to fix a bug when handlers are removed during
3163           handle_events.
3165         * examples/Reactor/ReactorEx/test_remove_handler.cpp: Added a new
3166           application that tests how the ReactorEx services simultaneous
3167           events and removes handlers.  This example also illustrates the
3168           use of the new ACE_Events wrapper.  Check
3169           examples/Reactor/ReactorEx/README for more details.
3171 Mon Oct 14 11:43:18 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3173         * tests: Added a new version of run_tests.sh, which was
3174           contributed by Michael Rueger <mike@SYSCOMP.DE>.
3176         * examples/Logger/simple-server/Logging_Handler.cpp (handle_input)
3177           and examples/Logger/Acceptor-server/server_loggerd.cpp
3178           (handle_input): Changed from stderr to cerr to work around bugs
3179           with the C run-time libraries on Win32.  Thanks to Tilo Christ
3180           <christ@swl.fh-heilbronn.de> for suggesting this.
3182 Mon Oct 14 11:09:42 1996  Prashant Jain  <pjain@merengue.cs.wustl.edu>
3184         * ace/Local_Name_Space_T.cpp (remap): Added processor specific
3185           stuff to remap(). The code was taken from the book "Win32
3186           Network Programming" by Ralph Davis (p.18) and takes care of
3187           cases specific to the 80x86 processor. The code ensures that the
3188           registers are set properly when we continue execution after an
3189           exception.
3191 Sun Oct 13 21:18:38 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3193         * ace/Log_Record.cpp (print): Added a test to make sure that the
3194           value returned from ctime_r != 0 (e.g., if time_stamp_ == -1) in
3195           order to avoid crashes.
3197         * examples/Logger/client/logging_app.cpp (main): Moved the
3198           construction of the ACE_Log_Record log_record object into the
3199           loop so that it will be recreated each time through.  If this
3200           isn't done, then we'll be continually "encoding" values into
3201           network byte order that have already been encoded and screwing
3202           things up on little-endian machines (such as Intel).  Thanks to
3203           Irfan and Tilo Christ <christ@swl.fh-heilbronn.de> for pointing
3204           me in the right direction on this.
3206         * ace/Log_Record.cpp: Changed the default constructor so that it
3207           gives default initializations to the data members.
3209         * examples/Logger/Acceptor-server/server_loggerd.cpp (handle_input): 
3210           Fixed a couple of typos where 
3212           Logging_Handler::handle_input (int)
3214           should be:
3216           Logging_Handler::handle_input (ACE_HANDLE)
3218           and
3220           size_t len;
3222           should be:
3224           ssize_t len;
3226           Thanks to Irfan for finding these.
3228 Sat Oct 12 08:48:23 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3230         * Released a beta version of ACE 4.0.32 for testing.
3232         * ace/Log_Record.cpp: rewrote the code a bit to try and avoid
3233           problems on NT when host_name == 0.
3235         * ace/Log_Record.cpp: Changed the use of ACE_OS::ctime() to
3236           ACE_OS::ctime_r() to avoid problems that might arise when
3237           ACE_Log_Record::print() is called from multiple threads.
3239         * ace/Log_Record.cpp: Commented out calls to ACE_TRACE to avoid
3240           weird problems with circular dependencies.  Thanks to Luca
3241           Priorelli <lucapri@mbox.vol.it> for suggesting this.
3243         * build/SunOS5.5/examples/Makefile: Added the Logger directory to
3244           the list of targets that are build automatically by Make.
3246 Fri Oct 11 17:13:03 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3248         * ace: Fixed lots of small warnings revealed when using the
3249           Greenhills compiler on VxWorks.  Thanks to David Levine for
3250           this.
3252         * ace/Pipe.h: In Pipe.h, the return value of ACE_Pipe::close()
3253           isn't explicitly declared, so some compilers gag.  Thanks to
3254           David Levine for this.
3256 Thu Oct 10 12:05:55 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3258         * ace/Thread.cpp: Correctly wrapped the methods in the *.cpp file
3259           so that they are ignored if threads *aren't* supported.
3261         * ace/Service_Repository.cpp (remove): Added the ACE_MT in front
3262           of all the ACE_GUARD* macros that utilize ACE_Thread* locks in
3263           order to ensure that ACE compiles correctly on all non-MT
3264           platforms.
3266         * examples/Shared_Malloc/Malloc.cpp: Removed the special purpose
3267           class for PROCESS_MUTEX since ACE_Process_Mutex will now work
3268           for non-MT platforms.
3270         * examples/Misc/test_dump.cpp: Changed all occurrences of
3272           cerr << "string " << this << endl;
3274           to 
3276           cerr << "string " << (u_long) this << endl;
3278           to work around problems with IRIX 5.3.  Thanks to Tilo Christ
3279           <christ@swl.fh-heilbronn.de> for reporting this.
3281         * ace/config-linux.h: Added a // in front of a stray comment line.
3282           Thanks to Neil Cohen for pointing this out.
3284         * ace/config-hpux-10.x-g++.h: Added a new config file for HP/UX
3285           10.x which should fix some problems with templates by using the
3286           G++ compiler.  Thanks to <afarahat@CCGATE.HAC.COM> for
3287           contributing this.
3289 Wed Oct  9 14:34:19 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3291         * ace/OS: Changed the logic of socket initialization, which has
3292           been moved out of ACE_SOCK and into ACE_OS.  This makes it
3293           possible to program more fully at the ACE_OS API (if such a
3294           crazy thing is really necessary ;-)).
3296         * examples/IPC_SAP/SOCK_SAP/C-in{client,server}.cpp: Fixed up the
3297           client and server apps so they will work on NT
3298           (i.e., replaced the use of int with ACE_HANDLE).  Thanks to Joe
3299           DeAngelis <bytor@faxint.com> for suggesting this.
3301         * ace/Synch.h: Now that we've got support for POSIX semaphores on
3302           Solaris, then we'll use them (when they are supported...) as the
3303           implementation of ACE_Process_Semaphore rather than using the
3304           slower ACE_SV_Semaphore_Complex stuff...
3306         * ace/OS.{h,i}: Added David Levine's support for named POSIX
3307           semaphores.  If ACE_HAS_POSIX_SEM is defined, then ACE_Semaphore
3308           will construct a named POSIX semaphore if passed a non-null
3309           name, or an unamed POSIX semaphore if passed a null name.  This
3310           is a great addition because POSIX semaphores are more powerful
3311           and useful than the Solaris UI semaphores.  Unfortunately,
3312           Solaris 2.5 doesn't support them (yet).
3314 Tue Oct  8 16:00:00 1996  Irfan Pyarali  <irfan@flamenco.cs.wustl.edu>
3316         * ace/OS: Integrated Irfan's encapsulation/emulation for Win32
3317           Events at the ACE_OS level. A new structure ACE_event_t was
3318           created to support Events on non-WIN32 platforms.  On WIN32
3319           platforms ACE_event_t is just a HANDLE.  On non-WIN32 platforms,
3320           ACE_event_t uses a combination of mutexes, condition variables,
3321           and counters to emulate Events. Both auto-reset and manual-reset
3322           events are supported.
3324         * ace/Synch: Integrated Irfan's encapsulation/emulation for Win32
3325           Events at the C++ wrappers level. There are three wrappers that
3326           were created: ACE_Event, ACE_Auto_Event, and ACE_Manual_Event.
3327           ACE_Event is a wrapper for the ACE_event_t structure. It
3328           provides functionality for signal, wait, pulse, and reset on an
3329           event. ACE_Event supports both auto-reset and manual-reset
3330           events. However, specializations of ACE_Event were created
3331           (ACE_Manual_Event and ACE_Auto_Event) to make it easier to use
3332           Events.
3334         * examples/Threads/test_manual_event.cpp: A test for manual-reset
3335           events. The test involves the creation and use of a barrier
3336           which uses an ACE_Manual_Event.
3338         * examples/Threads/test_auto_event.cpp: A test for auto-reset
3339           events. The test involves the use of an ACE_Auto_Event for
3340           signaling threads.
3342 Tue Oct  8 15:45:01 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3344         * ace/DEV.cpp (ACE_DEV): Removed a stray call to
3345           ACE_IO_SAP::dump().  Thanks to Brad Flood <BFLOOD@tcs.lmco.com>
3346           for this fix.
3348         * ace/OS.i: Added ACE_HAS_CHARPTR_SOCKOPT for VxWorks.  Thanks to
3349           David Levine for this.
3351         * ace/Dump.cpp (instance): Added an ACE_MT() macro around the
3352           ACE_GUARD_RETURN macro so that this will compile correctly on
3353           non-threaded platforms.  Thanks to David Levine for this.
3355         * ace/OS.h: the declaration of ACE_OS::msgctl needs "struct
3356           msqid_ds" instead of just "msqid_ds" to compile with the
3357           Greenhills C++ compiler.  Thanks to David Levine for this...
3359         * ace/Local_Name_Space_T.h: Added #include "ace/Local_Name_Space.h" 
3360           to avoid a problem during template generation.  Thanks to 
3361           Chris Lahey for this fix.
3363         * ace/OS.i (getprotobynumber_r): Added a pair of fixes from Chris
3364           Lahey to get the ACE wrappers for the getprotoby*_r() methods to
3365           compile on AIX.
3367         * examples/Threads: Added two new examples (test_auto_event.cpp
3368           and test_manual_event.cpp) that exercise the new ACE_Event
3369           mechanisms.
3371         * ace/Synch: Integrated Irfan's encapsulation/emulation for Win32
3372           Events at the C++ wrappers level.
3374         * ace/OS: Integrated Irfan's encapsulation/emulation for Win32 
3375           Events at the ACE_OS level.
3377 Fri Oct  4 08:32:47 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3379         * ace/OS.i: Added David Levine's new ACE_OS::mktemp() implementation.
3381 Wed Oct  2 13:26:20 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3383         * ace/SV_Message_Queue.i: Changed the casts of (msgbuf *) to
3384           (void *).
3386         * ace/OS.i: Added David Levine's implementation of inet_addr() for
3387           VxWorks.
3389         * ace/OS.i: Continued to merge together various parts of Win32 and
3390           UNIX to reduce redundancies.
3392 Tue Oct  1 15:03:42 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3394         * ace/OS.i: Added Chuck Gehr's new changes to ACE_OS::mutex_init()
3395           and ACE_OS::cond_init() to handle the MVS Pthreads madness.
3397         * ace/OS.i: Added zillions of #ifdefs for VXWORKS.  It's amazing
3398           these guys call themselves POSIX compliant -- lots of stuff is
3399           missing.  Thanks to David Levine for doing this!
3401         * ace/OS.cpp: Added David Levine's implementation of mktemp()
3402           for platforms that don't support it.
3404         * ace/OS.h: Added a bunch of minor changes for VXWORKS.  In
3405           addition, started to factor out common #ifdefs to make the code
3406           easier to maintain.
3408         * ace/OS.h: Added a new macro for ACE_LACKS_UTSNAME, and factored
3409           this out for both VxWorks and Win32.
3411         * ace/Time_Value.h: Added support for 2 VXWORKSisms: (1) we need
3412           to #include sys/times.h rather than the standard UNIX sys/time.h
3413           and (2) we need to change const timeval & to const struct
3414           timeval & to keep the Greenhills compiler happy.  Thanks to
3415           David Levine for this.
3417         * ace/INET_Addr.cpp: Added support for the insane VXWORKS
3418           hostGetByName() function.  Yikes!  Thanks to David Levine for
3419           this.
3421         * ace/Memory_Pool.cpp: Added a new #define called ACE_LACKS_SBRK
3422           and ACE_LACKS_SYSV_SHMEM, which is enabled on Win32 and VxWorks.
3423           Thanks to David Levine for reporting this.
3425         * ace/OS.h: Added new macros that #define ETIME for platforms like
3426           VxWorks that don't support it, but do support ETIMEDOUT.
3428         * ace/OS.h: Added placeholder #defines for USYNC_PROCESS and
3429           USYNC_THREAD when !defined (ACE_HAS_THREADS).  Thanks to Neil
3430           Cohen for reporting this.
3432 Tue Oct  1 00:42:35 1996  Douglas C. Schmidt  <schmidt@polka.cs.wustl.edu>
3434         * ace/Message_Block.cpp (size): Member base_ of ACE_Message_Block
3435           was being set to the new memory pointer before the old contents
3436           are saved in method size.  So the line 
3438           this->base_ = buf;
3440           was moved to a place some lines below.  Thanks to Marco Sommerau
3441           <sommerau@informatik.uni-stuttgart.de> for detecting this.
3443         * ace/Message_Queue.cpp: Changed the implementation of the
3444           enqueue_i() method so that FIFO order is maintained when
3445           messages of the same priority are inserted consecutively.
3446           Thanks to Jay Denkberg <jay_denkberg@comverse.com> for
3447           suggesting this.
3449 Mon Sep 30 22:59:38 1996  Douglas C. Schmidt  <schmidt@polka.cs.wustl.edu>
3451         * ace/OS.i (thr_yield): Added a new macro ACE_HAS_YIELD_VOID_PTR
3452           to make pthread_yield work on MVS.  Thanks to Chuck Gehr
3453           <gehr@sweng.stortek.com> for this fix.
3455         * ace/OS: Added a new macro called ACE_HAS_TIMEZONE_GETTIMEOFDAY
3456           that handles problems on MVS.  Thanks to Chuck Gehr
3457           <gehr@sweng.stortek.com> for this fix.
3459 Mon Sep 30 13:45:10 1996  Tim H. Harrison  <harrison@lambada.cs.wustl.edu>
3461         * ace/Local_Tokens.h: Updated some documentation in all the Token
3462           files.
3464 Mon Sep 30 18:01:12 1996  Prashant Jain  <pjain@merengue.cs.wustl.edu>
3466         * netsvcs/lib/: Renamed files Logger.{h,cpp} to
3467           Logging_Strategy.{h,cpp} to avoid confusion with Server_Logging
3468           and Client_Logging stuff. In addition, I modified the affected
3469           files, including Makefile, README, and the config files in the
3470           tests directory.
3472 Sun Sep 29 12:47:37 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3474         * ace/OS.h: Added Chuck Gehr <gehr@sweng.stortek.com> fixes for
3475           MVS to enable signals to work correctly.
3477         * ace/Time_Value.h: Added an extern "C" { } block around #include
3478           <pthreads.h> to solve a problem with Linux.  Thanks to Padhu
3479           Ramalingam <padhu@magicnet.net> for reporting this.
3481         * netsvcs/lib/Server_Logging_Handler.cpp: Changed the
3482           initialization of a static template object from ::request_count_
3483           (0L) to ::request_count_ = 0L.  Thanks to Gonzalo Diethelm
3484           <gonzo@ing.puc.cl> for reporting this.
3486         * ace/Remote_Tokens.h: Moved the inclusion of "Singleton.h" from
3487           Remote_Tokens.cpp to Remote_Tokens.h.  This should avoid
3488           template instantiation problems on some platforms (e.g., Irix
3489           6.2).
3491         * ace/config-irix6.2-sgic++.h: Changed ACE_HAS_SIGINFO to
3492           ACE_HAS_SIGINFO_T and added ACE_HAS_UCONTEXT_T.  Thanks to
3493           Gonzalo Diethelm <gonzo@ing.puc.cl> for reporting this.
3495         * ace/Token_Invariants.h: The ctor/dtor were private and the
3496           compiler would not allow a template of the class to be created.
3497           I switched them to public, but I wish there was a better way...
3498           Thanks to Gonzalo Diethelm <gonzo@ing.puc.cl> for reporting
3499           this.
3501         * ace/Synch_T.h: #include'd "ace/Event_Handler.h".  Thanks to
3502           Gonzalo Diethelm <gonzo@ing.puc.cl> for reporting this.
3504         * ace/Synch.h: The parameter name gives warnings when
3505           instantiating templates.  Thanks to Gonzalo Diethelm
3506           <gonzo@ing.puc.cl> for reporting this.
3508         * ace/Process: Changed the definition of the get_pid() method to
3509           getpid() to avoid a conflict with Irix.  Thanks to Gonzalo
3510           Diethelm <gonzo@ing.puc.cl> for reporting this.
3512         * ace/Log_Msg.cpp (log): Added another #elif !defined (ACE_WIN32)
3513           to handle logging for OS platforms that (1) aren't Win32 and (2)
3514           are versions of UNIX that don't support STREAM pipes.  Thanks to
3515           Gonzalo Diethelm <gonzo@ing.puc.cl> for reporting this.
3517         * ace/Acceptor.cpp (handle_signal): Erased the signum parameter
3518           name to avoid a nasty warning about arguments not used when
3519           instantiating templates.  Thanks to Gonzalo Diethelm
3520           <gonzo@ing.puc.cl> for reporting this.
3522         * ace/OS.h: Added the ACE_Export symbol to the definition of
3523           ACE_Str_Buf.  This makes it compile and link on NT.  Thanks to
3524           Prashant for noticing this (our favorite Win32ism...).
3526         * ace/Thread.h (ACE_Thread): Removed a default argument for one of
3527           the ACE_Thread::join() wrappers so this won't be ambiguous with
3528           the other join() wrapper.
3530         * ace/OS: Added a new wrapper for strtok_r().
3532 Sun Sep 29 16:12:01 1996  Prashant Jain  <pjain@merengue.cs.wustl.edu>
3534         * netsvcs/lib/: Renamed the project file for Win32 from lib.mdp to
3535           netsvcs.mdp. Also the original project file did not include some
3536           files such as Naming_Handler.cpp and Server_Logging_Handler.cpp
3537           and I fixed that. Finally removed two files System_Time.{h,cpp}
3538           which are already present in ace/.
3540 Sat Sep 28 16:34:56 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3542         * ace/OS: Added a new overloaded select() method that takes a
3543           const ACE_Time_Value &.  This is useful for situations where you
3544           are passing in ACE_Time_Value::zero.
3546 Fri Sep 27 16:20:46 1996  Douglas C. Schmidt  <schmidt@polka.cs.wustl.edu>
3548         * ace/ACE: Added a fix for the fact that VxWork's write() call
3549           doesn't take a const char *.
3551         * ace: Started adding support for VxWorks and GreenHills compiler,
3552           e.g., added the config-vxwork-ghs-1.8.h file.  Thanks to David
3553           Levine <levine@cs.wustl.edu> for getting this rolling!
3555 Thu Sep 26 00:15:46 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3557         * ace/Timer_Queue: Changed the public interface methods to be
3558           virtual in order to make it possible to override them in
3559           subclasses.  This makes it feasible to implement different types
3560           of Timers.
3562         * ace/OS: Added a wrapper for the strspn() string call.  Thanks to
3563           Irfan for noticing this omission.
3565         * ace/Synch_T.cpp (wait): Changed the line:
3567           return ACE_OS::cond_wait (&this->cond_, this->mutex_);
3569           to
3571           return ACE_OS::cond_wait (&this->cond_, &this->mutex_.lock_);
3573           Thanks to Dieter Quehl <dietrich.quehl@med-iss1.med.siemens.de>
3574           for noticing this.
3576         * ace/config-sunos5.4-g++.h: Removed the #define for
3577           ACE_HAS_BROKEN_RANDR and replaced the ACE_HAS_SVR4_SIGNAL_T with
3578           ACE_HAS_CONSISTENT_SIGNAL_PROTOTYPES since it looks like the
3579           latest gcc release (2.7.2) fixes this in their own header files.
3581 Sat Sep 21 10:45:43 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3583         * ace/OS.h: Added a new #define called ACE_HAS_BROKEN_MSG_H to the
3584           config-osf1-3.2.h file and used it in OS.h to work around
3585           problems with <msg.h> prototypes on that platform.
3587 Fri Sep 20 00:15:29 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3589         * Released version 4.0.31 for testing.
3591         * ace/Pipe.cpp: Initialize handles_ to ACE_INVALID_HANDLE in
3592           default constructor.  Thanks to Tim Harrison for pointing this
3593           out.
3595         * ace: Copied in new versions of ace.{mak,mdp} for Win32.
3597         * ace: Added TTY_IO.cpp to the Makefile.
3599         * ace/config-win32-msvc[24].0.h: Updated the config file so that
3600           it *doesn't* #define ACE_HAS_STRBUF_T since this type clearly
3601           isn't available on Win32!
3603         * ace: Modified all of OS.i and config-*.h files so that they
3604           would be consisten with respect to handling the size_t and int
3605           differences in socket implementations.  Thanks to Chuck Gehr
3606           <gehr@sweng.stortek.com> for helping with this for AIX.
3608         * ace/ACE.h (ACE): Added a new method called max_handles() that
3609           returns the maximum number of open handles currently supported
3610           by the process.
3612         * examples/Reactor/Misc/signal_tester.cpp: Revised the test to
3613           utilize the new idioms for programming with signals.
3615         * ace/OS.h: added a new #define called ACE_DEV_NULL that defaults
3616           to "/dev/null" on UNIX and "nul" on NT.  Thanks to David Trumble
3617           <trumble@steosf.nio.dec.com> for reporting this fix.
3619         * ace/Log_Msg.cpp: Added some checks to make sure that we don't
3620           try to strdup() if we are passed a NULL pointer.  Thanks to Luca
3621           for suggesting this.
3623         * ace/OS: Move ACE_Str_Buf into OS.{h,i} and remove the Str_Buf.h
3624           file.
3626         * Makefile: Added the "performance-tests" directory to the list of
3627           directories we build when making ACE.
3629         * ace: Moved the definition of strbuf from Str_Buf.h into OS.h.
3630           Thanks to Irfan for recommending this.
3632         * ace/Makefile: Added some additional sed magic on the
3633           Svc_Conf_y.cpp file in order to remove the very last warnings
3634           from MSVC++!
3636 Thu Sep 19 00:00:17 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3638         * ace/Service_Config.cpp (open): Only initialize the logger to use
3639           STDERR if the user hasn't already set the ACE_Log_Msg::flags().
3640           Thanks to Tom Leith <trl@icon-stl.net> for suggesting this.
3642         * ace/OS: Removed all traces of the ACE_HAS_INT_SOCKNAME and
3643           ACE_HAS_LENPTR_SOCKOPT since Chris Lahey's new fixes for AIX
3644           obviate the need for these.
3646         * ace/OS.i: Only #include <rpc/rpc.h> if the platform has RPC!
3647           Thanks to Chuck Gehr <gehr@sweng.stortek.com> for suggesting
3648           this.
3650         * ace: Removed all uses of ACE_HAS_SETOWN and replaced them with
3651           explicit tests for F_SETOWN and FASYNC.  This is more portable.
3652           Thanks to Chuck Gehr <gehr@sweng.stortek.com> for suggesting
3653           this.
3655         * ace/OS: Added a new #define called ACE_HAS_SIZET_SOCKET_LEN to
3656           handle platforms where the length parameter of bind(),
3657           connect(), accept(), etc. uses size_t rather than int.  This
3658           helps to get ACE working on MVS.  Thanks to Chuck Gehr
3659           <gehr@sweng.stortek.com> for suggesting this.
3661         * ace/OS: Added Chris Lahey's fixes that make the
3662           getprotoby{name,number}_r() functions work for AIX.
3664         * ace: Changed the ACE_HAS_STRUCT_HOSTENT_DATA to
3665           ACE_HAS_STRUCT_NETDB_DATA because we use a single symbol to
3666           refer to all of the odd netdb.h stuff that AIX has...
3668         * ace: Changed all uses of:
3670           iovec *iovp = (iovec *) alloca (total_tuples * sizeof *iovp);
3672           to
3674           iovec *iovp = (iovec *) alloca (total_tuples * sizeof (iovec));
3676           to keep the AIX compiler from complaining (falsely) about using
3677           iovp before it is initialized.  Thanks to Chris Lahey for
3678           reporting this.
3680         * ace/OS.h: Added Chris Lahey's changes that handle AIX's
3681           _XOPEN_EXTENDED_SOURCE features without polluting all the socket
3682           implementations!
3684         * ace/Thread.cpp (spawn_n): Removed an unreferenced local variable
3685           so that the Win32 compiler doesn't complain.
3687         * ace/OS.h: Added the definition for strbuf{} for NT.
3689         * ace: Removed the msg_hack.h file since it had OSF and DEC
3690           copyright info in it.  Replaced this with Antonio Tortorici's
3691           <antonio@rh0011.roma.tlsoft.it> clever use of _KERNEL and the
3692           new ACE_LACKS_SYSV_MSQ_PROTOS.
3694         * ace/INET_Addr.h: Updated the documentation to indicate more
3695           clearly the use of getservbyname().
3697         * ace/OS.cpp (thr_create): Added basic hooks to support the use of
3698           AfxBeginThread on Win32.  This is necessary to allow ACE to work
3699           seemlessly with MFC applications.  Added an THR_USE_AFX flag
3700           that can be "or'd" in with the other thread flags in calls to
3701           ACE_OS::thr_create().  If this flag is enabled *and* if we are
3702           compiling with ACE_HAS_MFC enabled, then AfxBeginThread() is
3703           called rather than _beginthreadex().
3705         * ace/INET_Addr.h (set): Fixed a typo in the documentation for
3706           set() (the order of "host:port" was backwards...).  Thanks to
3707           Brad Flood <BFLOOD@tcs.lmco.com> for reporting this.
3709 Wed Sep 18 00:36:01 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3711         * ace/SOCK_IO.cpp: Added a new recv() method that allows a client
3712           to read from a socket without having to provide a buffer to
3713           read.  This method determines how much data is in the socket,
3714           allocates a buffer of this size, reads in the data, and returns
3715           the number of bytes read.  The caller is responsible for
3716           deleting the memory.  Thanks to Luca Priorelli
3717           <lucapri@mbox.vol.it> for suggesting this.
3719         * ace/OS.h: Added a special #ifdef for IRIX 6.2 threads so that
3720           THR_BOUND and THR_SCOPE_SYSTEM are different.  Thanks to Gonzalo
3721           Diethelm <gonzo@ing.puc.cl> for reporting this.
3723         * ace/Message_Block.i (msg_class): Added a new "class" of messages
3724           to ACE_Message_Block: MB_USER.  This is useful for writing
3725           extensible applications a la Microslush Windows MSG stuff...
3727 Tue Sep 17 16:38:44 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3729         * ace/Message_Block: Changed the signature of the
3730           ACE_Message_Block constructors (and init()) so that they take
3731           const char * rather than char *.  In addition, changed the
3732           definition of one of the constructors (and init()) so that it
3733           takes a size field in addition to the buffer.
3735         * ace/Message_Block.cpp (size): Fixed a bug in the
3736           ACE_Message_Block::size() method -- we were failing to deal with
3737           allocators and ownership correctly during a resize.  Thanks to
3738           Amos Shapira <amos_shapira@mail.icomverse.com> for reporting
3739           this.
3741         * ace/Naming_Context.cpp: Removed the source of yet another
3742           warning about "inconsistent dll linkage.  dllexport assumed."
3744         * ace/Mem_Map.cpp (map_it): Added a cast to size_t (file_len)
3745           because by this time we know that file_len >= 0.  This avoids
3746           yet another warning on WinNT!
3748         * ace/Reactor.h: Fixed the remaining warnings about
3749           "signed/unsigned mismatch" in Win32 by changing the type of
3750           cur_size_ from size_t to ssize_t.
3752         * ace/Log_Msg.cpp: Modified the code so that on NT we use
3753           ACE_SPIPE_Msg rather than ACE_FIFO_Send_Msg.  Thanks to Luca
3754           Priorelli <lucapri@mbox.vol.it> for suggesting this.
3756         * ace/OS.i: Implemented the and put[p]msg() wrappers by being
3757           smart about allocating and copying data.
3759         * ace/TTY_IO.cpp (control): There was one too many end parentheses
3760           on line 192 of TTY_IO.cpp.  Thanks to Dave Trumble
3761           <trumble@steosf.nio.dec.com> for reporting this fix.
3763         * ace/Log_Msg.cpp (local_host): Fixed the use of program_name_ and
3764           local_host_ so that they strdup() the values passed by the
3765           users, rather than copying pointers.  This avoids problems if
3766           the user doesn't pass in static memory.  Thanks to Luca
3767           Priorelli <lucapri@mbox.vol.it> for reporting this.  Somehow
3768           this change got lost and I've reapplied it...
3770         * ace/Log_Record.cpp (round_up): Added an extra + 1 to the length
3771           since otherwise the final '\0' gets lots if len is a multiple of
3772           8.  Thanks to Luca Priorelli <lucapri@mbox.vol.it> for reporting
3773           this.  Somehow this change got lost and I've reapplied it.
3775         * ace/Memory_Pool.h: removed #if defined (ACE_HAS_SIGINFO_T) logic
3776           from both handle_signal() definitions (ACE_Shared_Memory_Pool
3777           and ACE_MMAP_Memory_Pool).  Thanks to Chris Lahey for fixing
3778           this.
3780         * ace/OS.h: Moved the define of SA_RESTART below the #include for
3781           signal.h.  Otherwise SA_RESTART will always be defined by OS.h,
3782           since SA_RESTART is defined on AIX in signal.h.  Thanks to Chris
3783           Lahey for fixing this.
3785         * ace/OS.h: Added some new #pragmas to suppress harmless warnings
3786           for the MSVC++ compiler.
3788 Tue Sep 17 13:20:53 1996  Prashant Jain  <pjain@merengue.cs.wustl.edu>
3790         * ace/Local_Name_Space_T.cpp: Modified ACE_Local_Name_Space::
3791           create_manager () so that all three naming scopes use the
3792           database variable defined in Name Options. This allows us to
3793           specify different names for databases for all three naming
3794           contexts. However, it is imporant to note that this can lead to
3795           potential problems where, for example, a process may use the
3796           same name for PROC_LOCAL database as an already existing
3797           NET_LOCAL database.
3799 Mon Sep 16 01:31:21 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3801         * examples/Logger/simple-server/Logging_Handler: get_handle(),
3802           handle_input(), and handle_close() want the right types
3803           (ACE_HANDLE instead of int).  Thanks to Luca Priorelli
3804           <lucapri@mbox.vol.it> for reporting these.
3806         * examples/Logger/simple-server/Logging_Acceptor.cpp: Fixed a typo
3807           (Log_Mskg.h should be Log_Msg.h of course...).  In addition,
3808           changed the use of -1 to ACE_INVALID_HANDLE.  Thanks to Luca
3809           Priorelli <lucapri@mbox.vol.it> for reporting these.
3812         * ace: Changed all uses of ACE_HAS_ACE_INLINED_OSCALLS to
3813           ACE_HAS_INLINED_OSCALLS.  This was a vestiage of a global
3814           replace gone amok.  Thanks to Alan Stweart <Axs2@osi.com> for
3815           reporting this!
3817         * ace/Log_Msg.cpp (open): Added a check for the OSTREAM flag in
3818           the ACE logger.  Thanks to Rick Orr
3819           <rorr@costello.den.csci.csc.com> for noticing this.
3821         * Released version 4.0.30 for testing.
3823         * netsvcs/clients/Naming/Dump_Restore/Dump_Restore.cpp
3824           (Dump_Restore): Deleted an extra "return 0;" within a
3825           constructor (duh...).
3827         * examples/Threads/test_process_{semaphore,mutex}.cpp (main):
3828           Fixed some annoying G++ compiler bug related problems.  We need
3829           to use old-style C casts to prevent ambiguous parsing.
3831         * examples/ASX/Event_Server/Transceiver/transceiver: Rewrote this
3832           example to illustrate how to use the ACE_Connector and
3833           ACE_Svc_Handler.
3835         * examples/ASX/Event_Server/Transceiver/transceiver: Finally clued
3836           in and realized that it is just not suitable to implement the
3837           event server transceiver with separate threads for input and
3838           output.  It is simply to non-portable to get these shut down
3839           gracefully.  I think John Ousterhout was right -- threads are
3840           evil!
3841           
3842         * examples/ASX/Event_Server: Merged the Consumer/Supplier
3843           directories into a single Transceiver directory to reflect the
3844           fact that the Consumer and Supplier were completely symmetrical!
3846         * ace/Module.cpp (close): Don't delete the Tasks in a Module if
3847           there are still threads running in them.  Otherwise we'll end up
3848           with a big mess.
3850 Mon Sep 16 15:50:45 1996  Prashant Jain  <pjain@merengue.cs.wustl.edu>
3852         * performance-tests/Misc/test_naming.cpp: Added a new test to the
3853           performance-tests directory called test_naming which simply does
3854           performance testing on Naming Service. The test runs both the
3855           SYNC and the NO-SYNC version of Naming Service.
3857 Mon Sep 16 15:22:52 1996  Tim H. Harrison  <harrison@lambada.cs.wustl.edu>
3859         * ace/Proactor.cpp (initiate): Added a check for
3860           ERROR_NETNAME_DELETED after ReadFile/WriteFile.  Now the
3861           initiating handler is immediately dispatched for EOF *and*
3862           closed connections.  Thanks to Luca Priorelli
3863           <lucapri@mbox.vol.it> for suggesting this change.
3865 Sun Sep 15 00:55:59 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3867         * Fixed all uses of ACE_Service_Config::end_event_loop() and
3868           ACE_Service_Config::run_event_loop() to be
3869           ACE_Service_Config::end_reactor_event_loop() and
3870           ACE_Service_Config::run_reactor_event_loop() since we now have
3871           to consider the other event loops (e.g., Proactor and ReactorEx)
3872           and it doesn't seem right to relegate those to 2nd class status.
3874         * ace: Finally got fed up with all the #ifdefs required to deal
3875           with extended signals and just changed the
3876           ACE_Event_Handler::handle_signal() method to always use the
3877           extended signal interface.  Fortunately, we can use default
3878           values to hid this from callers (though you may need to change
3879           your class definitions if you were assuming the
3880           handle_signal(int) interface.
3882         * ace/Memory_Pool.h: Changed all the methods of the various
3883           Memory_Pool classes to be virtual so that subclasses can
3884           selectively override them.  This shouldn't affect performance
3885           since all existing use cases work directly with the "derived"
3886           classes themselves, so there shouldn't be any overhead since the
3887           compiler can use direct calls rather than virtual function
3888           calls.
3890         * ace/OS.cpp (thr_create): Changed the call to CreateThread() to
3891           _beginthreadex() and the call to ExitThread() to _endthreadex()
3892           for Win32 in order to make ACE threads work correctly with
3893           Win32.  Thanks to James Mansion <james@wgold.demon.co.uk> for
3894           recommending this.
3896         * ace/ACE: Added two new static functions: read_adapter() and
3897           register_stdin_handler().  These are useful when writing code
3898           that must demultiplexing ACE_STDIN on both Win32 and UNIX.  This
3899           works around Win32 limitations that don't allow us to select()
3900           on non-sockets (such as ACE_STDIN).
3902         * examples/ASX/CCM_App/SC_Server.cpp: Updated this
3903           test so that it should now work correctly on Win32, where it
3904           isn't possible to select() on STDIN...
3906         * ace/Synch_T: Added a new class to ACE called "ACE_Test_and_Set."
3907           As this name implies, this class implements an atomic ``test and
3908           set'' abstraction.  This has all sorts of useful implications,
3909           particularly because it is a template that can be paramaterized
3910           by the type of LOCK (e.g., ACE_Null_Mutex, ACE_Thread_Mutex,
3911           etc.) and the type of TYPE (e.g., int, double, sig_atomic_t,
3912           etc.).  In addition, because this "is-a" ACE_Event_Handler it
3913           instances can be registered with the Reactor and used to shut
3914           down event hoops gracefully upon receipt of certain signals
3915           (e.g., SIGINT).  In fact, I've redone many of the example
3916           applications (e.g., ./examples/Logger/server/server_loggerd.cpp)
3917           to illustrate how this works.
3919 Sun Sep 15 20:40:17 1996  Tim H. Harrison  <harrison@lambada.cs.wustl.edu>
3921         * ace/ReactorEx.cpp (notify): I've redesigned this code.
3922           Previously, ReactorEx was explicitly managing a handle that it
3923           kept in handles_[0].  handles_[0] was used to implement
3924           ReactorEx::notify, which allowed other threads to wake up the
3925           thread waiting in ReactorEx::handle_events.  Now ReactorEx has
3926           an Event_Handler (ReactorEx_Notify) that is registered in the
3927           constructor of ReactorEx.  This allows us to treat events from
3928           handles_[0] just like every other event (i.e. by dispatching to
3929           handles_[0]->handle_signal). One of the results of this change
3930           is that code in remove_handler() is simplified a bit.
3932 Sun Sep 15 17:56:52 1996  Prashant Jain  <pjain@merengue.cs.wustl.edu>
3934         * ace/Naming_Context.cpp: Added a new flag to the constructor and
3935           open() method of ACE_Naming_Context that allows us to specify
3936           which Memory_Pool to use when creating ACE_Local_Name_Space
3937           (that is choose between ACE_MMap_Memory_Pool and
3938           ACE_Lite_MMap_Memory_Pool). 
3940         * ace/Memory_Pool.cpp: Added a new class called
3941           ACE_Lite_MMap_Memory_Pool which subclasses ACE_MMap_Memory_Pool
3942           and overrides the sync method so that it is a no-op.
3944         * ace/Local_Name_Space.cpp: Made some siginificant changes in
3945           ACE_Local_Name_Space. Here is what the problem was:
3946           ACE_Name_Space_Map (which is an ACE_Map_Manager) used an
3947           ACE_RW_Process_Mutex for synchronization. However, since the Map
3948           was kept in shared memory and was shared by all the processes,
3949           it got instantiated only by the first process which came
3950           along. Therefore, only the first process got around to creating
3951           and initializing the lock. 
3953           In fixing the problem, we made some other changes to
3954           ACE_Local_Name_Space and ACE_Name_Space_Map.  Both classes are
3955           now template classes. ACE_Local_Name_Space needs to be
3956           parameterized with a Memory_Pool (thus giving us a hook to
3957           implement the NO-SYNC option) as well as a LOCK.
3958           ACE_Name_Space_Map needs to be parameterized by an ALLOCATOR
3959           which is created by ACE_Local_Name_Space. Note that the reason
3960           we need to parameterize ACE_Name_Space_Map is so that we can
3961           pass an ACE_Allocator_Adapter (which subclasses from
3962           ACE_Allocator) with every method. It is not possible to pass an
3963           ACE_Allocator since the ::remap() method relies on an
3964           allocator() method defined on the ALLOCATOR that is passed in
3965           (and ACE_Allocator does not define an allocator() method). 
3967           The purpose of the class ACE_Name_Space_Map still remains the
3968           same. It IS_A Map_Manager and provides the hook to set the
3969           allocator to the process specific one. However, none of its
3970           methods acquire any locks. For that reason, the Map_Manager is
3971           parameterized with the Null_Mutex. All synchronization takes
3972           place inside ACE_Local_Name_Space. ACE_Naming_Context
3973           instantiates ACE_Local_Name_Space (depending upon the scope) and
3974           by default parameterizes it with ACE_MMap_Memory_Pool and
3975           ACE_RW_Process_Mutex. 
3977           Also made some more fixes to ACE_Local_Name_Space. In
3978           create_manager(), after we create the allocator, we now check to
3979           see if the backing store was created successfully and if not, we
3980           return -1. 
3982 Sat Sep 14 00:00:31 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
3984         * examples/Logger: Renamed the original server directory to
3985           "simple-server" and added a new directory called
3986           "Acceptor-server" which implements the Logger using the
3987           ACE_Acceptor.  Note that almost all of the implementation code
3988           disappears!
3990         * ace/Local_Name_Server_T.cpp: Removed the name_server_map_ array
3991           and replaced it with the ACE_NAME_SERVER_MAP #define, which is
3992           now contained in OS.h.
3994         * ace/Malloc.h: Added "virtual ... = 0" to the bind() and
3995           trybind() methods of the ACE_Allocator since they should be pure
3996           virtual functions...
3998         * ace/Synch{_T}: Separated out the wait (ACE_Time_Value *) and
3999           wait (void) methods in order to optimize the call sequence for
4000           the common case when there is no timeout.
4002         * ace/Synch: Added a new wait(ACE_Thread_Mutex &) method to
4003           ACE_Condition_Thread_Mutex so that we are consistent with the
4004           templated ACE_Condition_Mutex.
4006         * include/makeinclude: Changed uses of -pic to -PIC because ACE is
4007           now creating more than 2082 symbols.  It's probably time to
4008           split up the library...
4010         * ace/DEV_IO: Moved the ACE_DEV_Addr instance from ACE_DEV_IO into
4011           ACE_DEV so that it will be available for the ACE_DEV_Connector.
4012           This fixes a bug that prevented us from using the ACE_Connector
4013           in conjunction with the ACE_DEV_* classes.  Thanks to Karlheinz
4014           for clarifying what had to occur.
4015     
4016 Fri Sep 13 00:16:32 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
4018         * ace/OS.h: Changed the order of #includes so that <assert.h>
4019           comes before <sys/stat.h>.  This fixes some bugs with the
4020           Siemens SVR4 C++.  Thanks to Antonio Tortorici
4021           <antonio@rh0011.roma.tlsoft.it> for this fix
4023         * ace/ACE.cpp (handle_timed_complete): Added yet another weird
4024           hack to deal with the insanity that is TLI...
4026         * ace/Synch.cpp: Replaced all uses of ACE_Thread_Mutex_Guard with
4027           ACE_GUARD macros in order to avoid problems when mutexes fail.
4029         * ace/OS.h: Changed the definition of the ACE_*GUARD macros so
4030           that they are always enabled, even when we turn off ACE_MT_SAFE.
4031           This avoids a nasty semantic problem for components that use
4032           ACE_Process_Mutex.  Thanks to Avraham Nash
4033           <Avraham_Nash@praxisint.com> for reporting this problem.
4035         * ace/OS: Removed ACE_OS::fork_exec() since its functionality has
4036           been subsumed by ACE_Process.
4038         * ace/Thread_Manager: Added a new thread_descriptor_i() method
4039           that *doesn't* grab the lock in order to avoid deadlocks.
4041         * include/makeinclude/platform_sunos5_sunc++.GNU (CXX): had to add
4042           the -pta option so that we achieve template closure in ACE.
4044         * include/makeinclude: Added -lthread to the
4045           platform_sunos5_sunc++.GNU file.  I don't know how this slipped
4046           through the cracks!
4048         * ace/{DEV_IO,FILE_IO,SOCK_IO,SPIPE_Stream}: Fixed a braino with
4049           alloca where I was failing to multiply by sizeof (iovec).  Isn't
4050           C great? ...  Thanks to Chuck Gehr <gehr@sweng.stortek.com> for
4051           reporting this.
4053         * ace/SOCK_Dgram_Mcast.cpp: Added two changes to the ACE multicast
4054           code in order to get it to work on Win32.  The first change is
4055           to put the IP_ADD_MEMBERSHIP setsockopt() call *after* the
4056           bind() (in shared_open()).  The second is to convert the
4057           ACE_INET_Addr::get_ip_address() from host byte order into
4058           network byte order.  Thanks to Todd L. Montgomery
4059           <tmont@cerc.wvu.edu> and Steve Weismuller
4060           <spweismu@rsoc.rockwell.com> for helping with this.
4062         * examples/Threads/test_barrier2.cpp: Incorporated Karlheinz's
4063           new ACE_Barrier test program.
4065         * ace/Synch.h: Added Karlheinz's ACE_Null_Barrier class.
4067 Fri Sep 13 00:30:50 1996  Tim H. Harrison  <harrison@lambada.cs.wustl.edu>
4069         * tests/{Tokens_Test,Time_Service_Test}.cpp: Updated tests to use
4070           ACE_Process instead of ACE_OS::fork_exec.
4072         * ace/Process.cpp: Added a new ACE_Process abstraction that is a
4073           Portable encapsulation for creating new processes.  It allows
4074           assignment of STDIN, STDOUT, and STDERR of the new process.  On
4075           UNIX, ACE_Process uses fork and exec.  On Win32, it uses
4076           CreateProcess.  Since we can set the standard handles, we can
4077           mimic UNIX pipes on Win32 by building chains of processes.  This
4078           class should be used instead ACE_OS::fork_exec.
4080         * examples/OS/Process/process.cpp (main): Added new example
4081           application to show how to use ACE_Process.
4083 Thu Sep 12 00:55:25 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
4085         * ace/DEV_IO: Added methods get_local_addr() and get_remote_addr()
4086           so that ACE_Connector will work correctly.  Thanks to Brad Flood
4087           <BFLOOD@tcs.lmco.com> for reporting this.
4089         * ace/Thread_Manager.cpp (thr_self): Added a fix to solve the
4090           problem that Win32 GetCurrentThread() returns a pseudo-handle
4091           rather than a real handle.  Now, we just look things up using
4092           the thread id rather than the thread handle.  Thanks to Luca
4093           Priorelli" <lucapri@mbox.vol.it> for clarifying this.
4095         * ace/Proactor.cpp (initiate): Fixed an incorrect set of return
4096           values -- they were reversed.  Thanks to Brad Flood
4097           <BFLOOD@tcs.lmco.com> for reporting this.
4099         * ace/OS.i (thr_cmp): Added a check for
4100           !defined(ACE_HAS_SETKIND_NP) to avoid a problem with OSF/1.
4101           Thanks to Martin Schoeckle <schoeckle@ike.uni-stuttgart.de> for
4102           reporting this.
4104         * examples/IPC_SAP/DEV_SAP: Updated these examples to use the new
4105           ACE_TTY_IO classes.
4107         * ace: Moved the TTY_IO code from the
4108           examples/IPC_SAP/DEV_SAP/{reader,writer} directories into the
4109           files TTY_IO.{h,cpp} in the main part of ACE and integrated Brad
4110           Flood's <BFLOOD@tcs.lmco.com> changes for Win32.
4112         * ace/DEV_IO.i: Changed the mapping of send_n() and recv_n()
4113           methods to use write_n() and read_n() respectively so they will
4114           work on NT.  Thanks to Brad Flood <BFLOOD@tcs.lmco.com> for
4115           reporting this.
4117         * ace/Thread_Manager.h: Implemented a non-synchronized version of
4118           the lookup function for the <hthread_descriptor>.  This version
4119           assumes that the lock is help.  We need this to avoid
4120           intra-class method deadlock on systems (such as Solaris) that
4121           lack recursive mutexes.
4123         * ace/Log_Msg.cpp (ACE_Log_Msg): made sure to initialize
4124           ACE_Log_Msg::thr_handle_ to 0.  I'm not sure how this got
4125           changed...  Thanks to Luca Priorelli <lucapri@mbox.vol.it> for
4126           reporting this.
4128         * examples/Reactor/ReactorEx/test_reactorEx.cpp
4129           (register_thread_exit_hook): Changed hthread_t to ACE_hthread_t.
4130           Thanks to Luca Priorelli <lucapri@mbox.vol.it> for reporting
4131           this.
4133         * apps/Gateway/Gateway/Channel.h: Due to inconsistencies between
4134           the semantics of sockets and TLI with respect to establishing
4135           non-blocking connections it's not a good idea to use TLI in
4136           conjunction with select().  Therefore, I've #if 0'd out the use
4137           of TLI in the Gateway application.
4139 Wed Sep 11 00:25:38 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
4141         * ace/ACE.cpp (handle_timed_complete): Fixed a typo that was
4142           failing to set n = ACE::recv(...).  In addition, rethought how
4143           we figure out if a connection completes for the nth time...
4145         * ace/TLI.cpp (open): Modified the implementation of open() so
4146           that if oflag == 0 it is given an initial value of O_RDWR.
4147           Otherwise we'll get a "badflags" t_errno.
4149         * ace/Connector.h (connect): Modified connect() so that the
4150           default value of the flags parameter is O_RDWR.  This is
4151           necessary to make TLI_Connector::connect() work correctly by
4152           default.
4154         * examples/Logger: Updated the example logger client and server to
4155           illustrate more clearly how things like the Singleton Reactor
4156           and the ACE_Reactor timer mechanism work.  Thanks to Joe
4157           DeAngelis <bytor@faxint.com> for suggesting this.
4159         * ace/Pipe: Added a new constructor that makes it possible to
4160           initialize the <ACE_Pipe> from the <read> and <write> handles.
4161           Thanks to Stevan Warwick (sjw@aesthetic.com) for suggesting
4162           this.
4164         * config-irix5.3-sgic++.h: Added #define for ACE_NEEDS_SYSTIME_H.
4165           Thanks to Stevan Warwick (sjw@aesthetic.com) for reporting this.
4167         * examples/Logger/server/Client_Acceptor: Fixed some stray
4168           mis-uses of int that should have been ACE_HANDLE.  Thanks to
4169           Luca Priorelli" <lucapri@mbox.vol.it> for reporting this.
4171         * ace/{ACE,Log_Msg}.cpp: Added fixes for hexdump().  Thanks to
4172           Luca Priorelli" <lucapri@mbox.vol.it> for supplying these.
4174         * ace/Reactor.cpp (ACE_Reactor): Fixed a typo: "this->max_handlep1
4175           ()" should be "this->handler_rep_.max_handlep1 ()".  Thanks to
4176           Scott Shupe <shupes@mitre.org> for reporting this.
4178         * apps/Orbix-Examples/Event_Comm: Added a bunch of changes to make
4179           this application compile with Orbix 2.0.  Thanks to Mike
4180           O'Malley <momalley@caesun16.msd.ray.com> for the fixes.
4182         * ace/OS.cpp (thr_create): Added yet another fix for the IRIX 6.2
4183           pthreads implementation.  Thanks to Gonzalo Diethelm
4184           <gonzo@ing.puc.cl> for reporting this.
4186         * ace/config-irix6.2-sgic++.h: Changed ACE_HAS_IRIX53_GETTIMEOFDAY
4187           to ACE_HAS_IRIX_GETTIMEOFDAY because this also seems to be the
4188           case for IRIX 6.2...  Thanks to Gonzalo Diethelm
4189           <gonzo@ing.puc.cl> for reporting this.
4191         * ace/TLI_{Connector,Acceptor}.cpp: Added tests against NULL
4192           pointers to avoid segmentation faults when the TLI
4193           implementation doesn't allocate memory for the udata and opt
4194           fields of netbuf structures.
4196         * ace/Mem_Map.i (ACE_Mem_Map): Added an accessor so that callers
4197           can get the name of the filename that is being used as the
4198           backing store.  Thanks to the James Mansion
4199           <james@wgold.demon.co.uk> for recommending this.
4201 Tue Sep 10 00:26:52 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
4203         * ace/OS.cpp (thr_create): Modified the thr_create()
4204           implementation for Win32 so that if the caller doesn't care
4205           about this value we can avoid a HANDLE leak.  Thanks to the
4206           James Mansion <james@wgold.demon.co.uk> for recommending this.
4208         * ace/Thread.cpp (ACE_Thread): Moved both definitions of spawn_n()
4209           into the Thread.cpp since they have loops and don't benefit from
4210           being inlined.  
4212         * ace/Svc_Handler.h: Moved operator delete() into the public part
4213           of the class in order to make various compilers happy...
4215         * ace/OS.i (ACE_OS): Fixed the #define that selects the (union
4216           wait *) alternative of wait().  This original was protected by
4217           ACE_LACKS_POSIX_PROTO, but it should be ACE_HAS_UNION_WAIT.
4219         * performance-tests: Created a new directory that will contain all
4220           of the ACE performance tests.  Move the Synch-Benchmarks and the
4221           TTCP tests from ./apps into here, and also moved the
4222           test_mutex.cpp and test_singleton.cpp files from
4223           ./examples/{Threads,Misc}, respectively.  Thanks to Tim Harrison
4224           for this suggestion.
4225   
4226         * ace/OS.i (ACE_OS): in WIN32 closesocket() returns 0 if call is
4227           OK, so I changed the return value to be the other way around.
4228           Thanks to Luca Priorelli <lucapri@mbox.vol.it> for reporting
4229           this.
4231         * ace: Changed the ACE_NO_POSIX_PROTO #define to something more
4232           meaningful: ACE_LACKS_POSIX_PROTO.  Thanks to Jonathan Biggar
4233           <jon@sems.com> for suggesting this.
4235         * ace/config-sunos4-g++.h: Added the #define ACE_NEEDS_SYSTIME_H.
4236           Thanks to Alexandre Karev <akg@na47sun05.cern.ch> for reporting
4237           this.
4239         * ace/OS: Fixed a bunch of pthreads portability problems that
4240           showed up on OSF/1 4.0.  Also added support for asctime_r() and
4241           ctime_r() for OSF/1 4.0.  Thanks to Dave Trumble
4242           <trumble@steosf.nio.dec.com> for reporting these fixes.
4244         * ace/Synch_T.cpp (ACE_TSS_Read_Guard): Removed a stray "new" that
4245           was causing problems for the ACE_NEW macro.  Thanks to Dave
4246           Trumble <trumble@steosf.nio.dec.com> for reporting this.
4248         * ace/Local_Tokens.h: Fixed a broken use of "friend", which was
4249           missing the keyword "class."  Thanks to Dave Trumble
4250           <trumble@steosf.nio.dec.com> for reporting this.
4252         * ace/config-osf1-4.0.h: Included Dave Trumble's
4253           <trumble@steosf.nio.dec.com> config file for OSF/1 4.0.
4255         * include/makeinclude/platform_osf1_4.0.GNU: Included Dave
4256           Trumble's <trumble@steosf.nio.dec.com> platform macros file for
4257           OSF/1 4.0.  Also renamed platform_osf1.GNU to
4258           platform_osf1_3.2.GNU to deal with the new version.
4260         * ace/Proactor: There wasn't a way to destroy an
4261           ACE_Overlapped_File object without closing the ACE_HANDLE
4262           attached to it.  Therefore, I added a flag that keeps track of
4263           whether we have to delete this or not.  Thanks to Amos Shapira
4264           <amos_shapira@mail.icomverse.com> for suggesting this.
4266         * examples/Threads/test_future[12].cpp: Updated the tests to use
4267           the new call() semantics in order to shut down the Scheduler's
4268           event loop gracefully.
4270         * ace/Method_Object.cpp: Added a return value to the call()
4271           routine.  This can be used to indicate to the caller that it is
4272           necessary to shut down the event loop.
4274 Mon Sep  9 02:07:08 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
4276         * ace/Service_Config.cpp (ACE_Service_Config): #ifdef's out the
4277           registration of signal handling to control reconfiguration on
4278           Win32 since it doesn't really handle signals very well.  Thanks
4279           to John Morey <jmorey@tbi.com> for bringing this to my
4280           attention.
4282         * ace/CORBA_Handler: Replaced CORBA_[123] with ACE_CORBA_[123].
4284         * examples/CORBA: Updated the test programs to work portably
4285           across different versions of Orbix.
4287         * ace/OS: Added a new wrapper for the getcwd() call.
4289         * examples/Threads/test_recursive_mutex.cpp: Added the use of
4290           ACE_Guard<> to illustrate how these work with the
4291           ACE_Recursive_Thread_Mutex.  Thanks to Gonzalo Diethelm
4292           <gonzo@ing.puc.cl> for motivating me to do this.
4294         * examples/Threads/test_process_{mutex,semaphore}: Added two new
4295           tests to illustrate how the ACE_Process_Mutex and
4296           ACE_Process_Semaphore work, respectively.
4298         * ace/Synch: Replaced the implementation of ACE_Process_Semaphore
4299           to use SV_Semaphore_Complex on UNIX platforms in order to get
4300           the same semantics for Win32 and for UNIX.  Thanks to the James
4301           Mansion <james@wgold.demon.co.uk> for recommending this.
4303         * ace/OS.h: Added some parens around the ACE BIT* macros so that
4304           the precedence levels would be dealt with correctly and we don't
4305           get any nasty surprises...
4307         * ace/{Synch_T,Synch}: Modified the implementation of all the
4308           *acquire()/release() methods so they keep track of whether they
4309           own the mutex.  Thus, if a code path needs to give up the mutex
4310           within the lifetime of the mutex, and it calls mutex_.release(),
4311           then the destructor will not call it again.  Thanks to the James
4312           Mansion <james@wgold.demon.co.uk> for recommending this.
4314         * ace/{Synch_T,Synch}: Changed the name of the field result_ to
4315           owner_ for the ACE_Thread_Muetx_Guard and ACE_Guard.  This is
4316           more representative of the true purpose of this field.
4318         * ace/Synch: Updated ACE_Thread_Mutex_Guard so that it has the
4319           same interface and semantics of ACE_Guard.  Thanks to the
4320           ever-vigilant James Mansion <james@wgold.demon.co.uk> for
4321           noticing this.
4323         * examples/Log_Msg/test_log_msg.cpp (main): Added a test of the
4324           new ACE_Log_Msg::priority_mask() functionality.
4326         * ace/Log_Msg.cpp: Added a new method called priority_mask(),
4327           which updates the new thread-specific priority_mask_ data member
4328           with the new mask and returns the old mask.  This is useful for
4329           applications written using ACE_Log_Msg.  Often, these have log()
4330           calls with low priority such as LM_DEBUG that don't need to be
4331           printed, but for which the logging code should not be removed.
4332           The priority_mask() scheme makes it possible to selective enable
4333           printing of certain priorities.  Thanks to Rochi Febo Dommarco
4334           <rocky@alter.it> for suggesting this.
4336         * netsvcs/clients/Logger/indirect_logging.cpp (main): Modified the
4337           test program so that it randomly selects logging priorities that
4338           are powers of two.
4340         * ace/Log_Priority.h: Renumbered the LM_* logging flags so that
4341           they are all powers of two.  This makes it easy to implement a
4342           scheme for selectively printing only certain logging values.
4344 Sun Sep  8 10:46:40 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
4346         * ace/Proactor.cpp: Fixed up the error handling in ACE_Proactor so
4347           that it returns an error both in case of "bad errors," as well
4348           as when ACE_WIN32 isn't defined.  Thanks to Amos Shapira
4349           <amos_shapira@mail.icomverse.com> for reporting this.
4351 Sun Sep  8 14:11:08 1996  Tim H. Harrison  <harrison@lambada.cs.wustl.edu>
4353         * examples/Reactor/Proactor/README: Updated the test_proactor.cpp
4354           and README files to clarify the relationship between the
4355           Proactor and ReactorEx.  This example uses the Proactor as the
4356           main event loop (not the Reactor or ReactorEx).  Thus, this
4357           application can only do overlapped I/O and timers
4358           asynchronously.  To be able to react to other Win32 events, see
4359           the ACE_ReactorEx and the examples/Reactor/ReactorEx/ test.
4360           Thanks to Amos Shapira <amos_shapira@mail.icomverse.com> for
4361           pointing out the ambiguity.
4363 Sat Sep  7 14:09:21 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
4365         * ace/Task.cpp: Enhanced the activate() method so that the caller
4366           can set the priority and the thread group id.  Thanks to
4367           Karlheinz for this suggestion.
4369         * ace/OS.h: Added default values of 0 for the trailing arguments
4370           for the {mutex,sema,cond}_init() methods.
4372         * examples/Threads/test_mutex.cpp: Added a new test program that
4373           illustrates the difference between implementations of thread
4374           mutex wrappers that use inheritance and dynamic binding vs. the
4375           ACE approach (which doesn't use inheritance and dynamic
4376           binding).  The results I got on my SPARCstation 20 model 712 is
4377           included in the source file.  Thanks to James Mansion
4378           <james@wgold.demon.co.uk> for motivating me to write this.
4380         * examples/Misc/test_singleton.cpp: Added a new test program that
4381           illustrates the performance of using the Double-Checked Locking
4382           pattern compared with the standard "Mutex::acquire()/release()"
4383           approach.  Thanks to Jim Coplien <cope@research.bell-labs.com>
4384           for encouraging me to get these performance numbers.
4386 Tue Sep  3 00:38:47 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
4388         * ace/XtReactor: Added minor fixes to XtReactor to fix complaints
4389           about "bool" not being defined and the destructor
4390           ~ACE_XtReactor() has already having a body.  Thanks to Andres
4391           Kruse <Andres.Kruse@cern.ch> for these fixes.
4393         * ace/Mem_Map.cpp: Make sure that this->length_ is initialized to
4394           0 in ACE_Mem_Map::map ().  Thanks to James Mansion
4395           <james@wgold.demon.co.uk> for pointing this out.
4397         * ace/Thread.i (spawn_n): In ACE_Thread::spawn_n the sense of the
4398           following check is wrong: 
4400           for (i = 0; i < n; i++)
4401           // Bail out if error occurs.
4402             if (ACE_OS::thr_create (func, arg, flags, &t_id, 0, priority,
4403                                     stack == 0 ? 0 : stack[i],
4404                                     stack_size == 0 ? 0 : stack_size[i]) != 0)
4405               thread_ids[i] = t_id;
4406             else
4407               break;
4409           The '!=' should be '=='.  Thanks to James Mansion
4410           <james@wgold.demon.co.uk> for pointing this out.
4412         * include/makeinclude/rules.local.GNU (MAKEFILE): Changed the
4413           $WRAPPER_ROOT/include/makeinclude/rules.local.GNU line that
4414           says:
4416           sed -e "s:$(WRAPPER_ROOT);$$(WRAPPER_ROOT);g" \
4418           so that the double dollar is now "\$$" (prefixed the first
4419           dollar sign with a backslash). If not, my shell will try to
4420           execute WRAPPER_ROOT for some reason. With "\$$" it works as it
4421           should.  Thanks to Marius Kjeldahl <marius@funcom.no> for
4422           reporting this.
4424         * Released version 4.0.29 for testing.
4426         * ace/OS.i (thr_getspecific): Added a new case for OSF/1.  Thanks
4427           to Martin Schoeckle <schoeckle@ike.uni-stuttgart.de> for
4428           reporting this.
4430         * ace/Thread_Manager.cpp (spawn_i): Removed an invalid
4431           initialization of ACE_hthread_t = 0, which doesn't work on all
4432           pthreads platforms because pthreads uses a struct in some
4433           implementations.  Thanks to Martin Schoeckle
4434           <schoeckle@ike.uni-stuttgart.de> for reporting this.
4436         * man: Updated all the nroff and html documentation to conform to
4437           the latest version of ACE.
4439         * netsvcs/lib/{Name_Handler,TS_Server_Handler}.cpp: Fixed
4440           some mistakes in the ACE_TEMPLATES_REQUIRE_SPECIALIZATION
4441           code so that all the services can be linked together without
4442           multiply defined symbols.
4444         * netsvcs/lib/Name_Handler.cpp: Fixed a spot where we weren't
4445           passing in an lvalue to send_request().  Why this wasn't showing
4446           up earlier I don't know, but GCC caught it!
4448 Mon Sep  2 00:47:00 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
4450         * ace/Thread_Manager.cpp: Updated all comparisons of ACE_thread_t
4451           and ACE_hthread_t so that they use the ACE_OS::thr_equal() and
4452           ACE_OS::thr_cmp() methods, respectively.  Thanks very much to
4453           Martin Schoeckle <schoeckle@ike.uni-stuttgart.de> for identify
4454           the need for this.
4456         * ace/OS: Added a new method called thr_cmp() which compares two
4457           ACE_hthread_t values for equality.  Unfortunately, we can't just
4458           compare these directly via == because on some platforms they are
4459           implemented as structs.  Right now, I'm assuming that if
4460           ACE_HAS_TID_T is enabled that we can compare tid_t's using ==.
4461           If this turns out to be incorrect (e.g., if tid_t's are also
4462           implemented as structs, please let me know).
4464         * ace/Future: Changed the overloaded result() method to a pair of
4465           get()/set() methods.
4467         * tests/test_config.h: Fixed a bug in the reset() routine.  This
4468           was originally deleting the global static ace_file_stream.
4469           However, this was causing segmentation faults if destructors for
4470           objects local to main() were trying to write to the output file.
4471           Therefore, instead of deleting the ostream, we simply flush()
4472           it!
4474           In addition, also renamed the various functions in test_config.h
4475           to make sure they don't conflict with any other names by
4476           prefixing them with ace_test_...
4478         * ace: Added many small fixes for IRIX 6.2.  Thanks to Gonzalo
4479           Diethelm <gonzo@ing.puc.cl> for reporting all of these!
4481         * ace/OS: Added a wrapper for the UNIX syscon() system call.
4483         * ace/LSOCK.cpp (recv_handle): Rearranged the casts so that things
4484           work correctly on platforms with odd definitions ot struct
4485           iovec.  Thanks to Gonzalo Diethelm <gonzo@ing.puc.cl> for
4486           reporting this.
4488         * ace/Task.cpp (ACE_Task_Exit): Rearranged the order in which we
4489           shut down a Task via the Task_Exit hook so that we first
4490           decrement the count of the threads in the task and *then* call
4491           its close() hook.  This guards against cases where the close()
4492           hook does something crazy like "delete this".
4494         * ace/XtReactor.h: Changed #include "X11/Intrinsic.h" to #include
4495           <X11/Intrinsic.h>.  Thanks to Gonzalo Diethelm
4496           <gonzo@ing.puc.cl> for suggesting this.
4498         * ace/Future.cpp (ACE_Future): Added some strategic "consts" to
4499           the assignment operator and copy constructor for ACE_Future and
4500           ACE_Future_Rep.
4502         * examples/Threads/test_task_three.cpp (main): Revised the test so
4503           that it will shut itself down automatically when all the threads
4504           have finished.
4506         * examples/Threads/test_task_two.cpp (main): Revised this test so
4507           that it doesn't run forever, but only runs either 1000 times or
4508           as many times as the user specifies on the command line.  Thanks
4509           to Gonzalo Diethelm <gonzo@ing.puc.cl> for suggesting this.
4511         * ace/OS.i: Added an extra #else for thr_sigsetmask(),
4512           thr_min_stack(), and thr_kill() for weirdo platforms that don't
4513           conform to the other threading APIs...
4515 Sun Sep  1 20:15:28 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
4517         * examples/ASX/Message_Queue: Changed the use of read(0, ...) and
4518           write(1, ...) to ACE_OS::read(ACE_STDIN, ...)  and
4519           ACE_OS::write(ACE_STDOUT, ...) in buffer_stream.cpp and
4520           bounded_buffer.cpp.
4522         * ace/OS.i: Fixed the errno mapping of the cond_timedwait()
4523           functions so that they set errno to ETIME rather than EBUSY when
4524           timeouts occur.  This is necessary to support Solaris and POSIX
4525           pthreads semantics on Win32.
4527         * build/SunOS5.5/examples/ASX/Message_Queue/buffer_stream.cpp:
4528           Modified the example somewhat so that it uses the Singleton
4529           thr_mgr() method from ACE_Service_Config.
4531 Sun Sep  1 17:29:58 1996  Tim H. Harrison  (harrison@lambada.cs.wustl.edu)
4533         * ace/ACE.cpp (map_errno): Added a new static method to the ACE
4534           class.  This method allows us to map troublesome win32 errno
4535           values (e.g. WSAEWOULDBLOCK) to values that standard C strerr
4536           function understands.  Thank you Microsoft. 
4538         * ace/Log_Msg.cpp (log): Added a call to ACE::map_errno to the %p
4539           option.  Now the ACE logger can begin to map Win32 error values
4540           into meaningful strings.
4542         * netsvcs/lib/lib.mdp: Added a project file for the netsvcs
4543           library.  This builds a dll into ace/netsvcs.dll (not into the
4544           netsvcs/lib directory).  This reduces the number of paths needed
4545           in %PATH%.
4547         * examples/Tokens: Renamed this directory netsvsc/clients/Tokens.
4549         * ace/ace.mdp: Removed wsock32.lib from the ace files listing.
4550           The problem is that we can't assume where MSDEV is installed.  I
4551           added wsock32.lib and advapi32.lib to the
4552           build/settings/link/library_modules line.
4554         * ace/config-win32-msvc4.0.h: Disabled the "C4355: 'this' : used
4555           in base member initializer list" warning.  Thanks to Amos
4556           Shapira for figuring this out for us.  Although "this" is
4557           unneeded for win32, it is required for compilers on other
4558           platforms (e.g., AIX).
4560         * ace/Message_Queue.cpp (dequeue_head_i): Andres Kruse pointed out
4561           that we weren't doing head_->prev (0), when dequeuing!
4563 Tue Aug 27 21:00:25 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
4565         * include/makeinclude/platform_sunos5_sunc++_4.1.GNU (CXX): Added
4566           Andres Kruse's changes for SunC+ 4.1.
4568         * ace: Fixed line # 12 of ace/config-sunos4-sun4.1.4.h, 
4569           which read:
4571           "#define ACE_HAS_SVSV_IPC"  (ACE_HAS_ ess vee ess vee _IPC)
4573           to
4575           "#define ACE_HAS_SYSV_IPC"  (ACE_HAS_ ess wye ess vee _IPC)
4577           Fix another problem:
4579           #define ACE_LACKS_THREAD_STACK_ADDR     (OS.cpp)
4581           was inconsistently defined in:
4583           #define ACE_LACKS_THREAD_STACK_ADDRESS  (config-aix-4.1.x.h)
4585           Thanks to Alan Stweart <Axs2@osi.com> for reporting
4586           this!
4588 Mon Aug 26 00:34:05 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
4590         * Updated all of ACE such that the ACE_GUARD* macros now all take
4591           the name of the ACE_*Guard* that they will use as the scoped
4592           locking object.  This is important for several reasons:
4593           
4594           1. It make it more clear what is going on in the code, rather
4595              than hiding behind the macros!
4597           2. It is now possible to have multiple ACE_GUARD* macros in the
4598              same scope by calling each scoped locking object a different
4599              name.  This is used in the Local_Tokens.cpp file.
4601         * ace/Synch.h (ACE_Null_Mutex_Guard): Added the locked() method so
4602           that this signature will conform to the one expected of
4603           ACE_Guard.
4605         * tests: Added a new file Test_Future.cpp, which tests the new ACE
4606           Futures mechanism using Active Obejcts.  Thanks to Andres Kruse
4607           <kruse@cern.ch> for contributing this test.
4609         * ace: Added three new files: Future.{h,cpp},
4610           Method_Object.{h,cpp}, and Activation_Queue.{h,cpp}, which
4611           implement Polymorphic Futures.  Thanks to Andres Kruse
4612           <kruse@cern.ch> for contributing these.
4614         * ace/Stream.cpp (dump): Replaced LM_INFO with LM_DEBUG.
4616 Sun Aug 25 21:57:57 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
4618         * ace: Rather than using operator new directly, most of ACE now
4619           uses the ACE_NEW and ACE_NEW_RETURN macros.  For instance,
4620           rather than writing:
4622           if (token_manager_ == 0)
4623             token_manager_ = new ACE_Token_Manager;
4625           we should write:
4627           if (token_manager_ == 0)
4628             ACE_NEW_RETURN (token_manager_, ACE_Token_Manager, 0);
4630           The reason for this is that it makes it much easier to ensure
4631           that all dynamic memory allocation errors are treated uniformly.
4632           I've updated the entire ACE library code tonight to make this
4633           usage consistent whenever possible.
4635 Sat Aug 24 11:51:38 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
4637         * ace/Time_Value.h: Simplified various things so that the nasty
4638           macros necessary to build DLLs on Win32 will be simplier.  In
4639           addition, I will only #include <sys/time.h> for those platforms
4640           that don't already do this in <time.h> (i.e., if
4641           ACE_NEEDS_SYSTIME_H is defined in config.h).  Please let me know
4642           if you run across any platforms like this.
4644         * ace/TLI_{Connector,Acceptor}: Added two additional parameters at
4645           the end of the connect() and accept() methods, respectively, so
4646           that the ACE TLI wrappers can be used with X.25.  Thanks to Ajit
4647           Sagar <asagar@spdmail.spd.dsccc.com> for suggesting this fix.
4649         * ace: Integrated Eric Newton's XtReactor into the Makefile.  If
4650           you want to include this into ACE, make sure to define
4651           ACE_HAS_XT in the config.h file.
4653         * examples/Misc: Integrated the XtReactor tests.
4655         * ace/OS.i (getservbyname,gethostby*): Fixed a suble omission --
4656           any calls to socket function should be wrapped by the
4657           ACE_SOCKCALL_RETURN macro in order to make the errnos work
4658           correctly on Win32.
4660         * ace/OS: Added support for the getprotoby{name,number} wrappers.
4661           Thanks to Joe DeAngelis <bytor@faxint.com> for suggesting this.
4663         * ace/Connector.cpp: Fixed a subtle bug in the ACE_Connector.
4664           The problem centered around the following line in
4665           cleanup_AST():
4667           if (this->handler_map_.find (handle, ast) == -1)
4669           This lookup always failed because the key, the handle of the
4670           service handler, was always -1.  The service handler's handle is
4671           not set until a successful connection is made and connector
4672           transfers ownership of the handle to the service handler.  The
4673           fix for this is to store the ACE_HANDLE in the ACE_Svc_Tuple
4674           *separately* from the ACE_Svc_Handler.  Thanks to Bill Gerecke
4675           <gerecke@rayva.org> for being so persistent in tracking this
4676           down.
4678         * ace/ARGV.cpp (ACE_ARGV): Added a nifty new constructor that
4679           converts argv-style vectors of strings into a single string
4680           (this is the reverse of what the original constructor does!).
4682         * ace/ACE: Added a new utility method called strecpy(), which
4683           copies <t> to <s>, returning a pointer to the end of the copied
4684           region (rather than the beginning, a la <strcpy>.
4686 Thu Aug 22 15:43:58 1996    <harrison@samba.cs.wustl.edu>
4688         * ace/OS.h: Changed the interface of ACE_OS::fork_exec (char
4689           *const argv[]).  (There is no longer a separate const char *path
4690           parameter.  Now, argv[0] must be the full path name to the
4691           executable.
4693         * tests/Time_Service_Test.cpp:  Updated the Time Service
4694           one-button test to use the new ACE_OS::fork_exec.  I didn't
4695           event break it.
4697         * tests/Tokens_Test.cpp:  Updated the Tokens one-button test to
4698           use the new ACE_OS::fork_exec.  It actually works now.
4700         * tests/test_config.h: Added some more #defines to help simplify
4701           path differences between NT and UNIX.  Perhaps these should be
4702           moved into OS.h?
4704 Thu Aug 22 13:46:58 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
4706         * ace/Thread_Manager.cpp (ACE_Thread_Control): The status_ member
4707           in ACE_Thread_Control() was not being initialized!  This caused
4708           Purify to complain loudly about invalid memory accesses. I have
4709           added an initialiser to ACE_Thread_Control::ACE_Thread_Control
4710           to set status_ to 0.  Thanks to Ross Dargahi <rossd@krinfo.com>
4711           for reporting this.
4713         * ChangeLog: The ACE configuration files "config-irix*.h" defined
4714           'ACE_HAS_SIGINFO' to indicate that IRIX supports SVR4 extended
4715           signals.  This should be 'ACE_HAS_SIGINFO_T' instead.  Thanks to
4716           Craig Johnston <johnston@tortilla.ds.boeing.com> for reporting
4717           this.
4719 Wed Aug 21 21:09:01 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
4721         * ace/Time_Value.h: Added an extra condition, #if defined
4722           (ACE_BUILD_DLL) so that ACE_Svc_Export evaluates to
4723           something. Previously, it was evaluating to nothing in some
4724           files such as Naming_Context.cpp where we were doing #define
4725           ACE_BUILD_DLL and not #define ACE_BUILD_SVC_DLL.
4727 Wed Aug 21 00:33:17 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
4729         * ace/ACE.cpp (format_hexdump): Fixed a minor bug in
4730           format_hexdump().  If the buffer to dump is a multiple of 16 it
4731           prints an extra blank line.  ALso fixed the code to use spaces
4732           rather than tabs and put an extra space between the first 8 HEX
4733           bytes and the second.  Thanks to Luca Priorelli
4734           <lucapri@mbox.vol.it> for this code.
4736         * ace/Log_Msg.h (ACE_HEX_DUMP): Added a new logging macro:
4737         
4738           #define ACE_HEX_DUMP(X) \
4739             do { int __ace_error = errno; \
4740               ACE_Log_Msg *ace___ = ACE_Log_Msg::instance (); \
4741               ace___->set (__FILE__, __LINE__, 0, errno, ace___->restart (),
4742               ace___->msg_ostream ()); \ ace___->log_hexdump X; \
4743             } while (0)
4745           which makes it possible to dump info in HEX.  Thanks to Luca
4746           Priorelli <lucapri@mbox.vol.it> for suggesting this.
4748         * ace/config-win32-msvc4.0.h: Added 
4749         
4750           #define _WINSOCKAPI_
4752           To avoid multiple inclusions.  Thanks to Luca Priorelli
4753           <lucapri@mbox.vol.it> for suggesting this.
4755         * ace/OS.h: enclosed the #define of WIN32_LEAN_AND_MEAN macro
4756           definition between #ifndef ... #endif to avoid compiler
4757           warnings.  Thanks to Luca Priorelli <lucapri@mbox.vol.it> for
4758           suggesting this.
4760         * ace/SOCK.cpp (win32_fini): Fixed a potential problem in ACE
4761           where any code of the form:
4763           ACE_DEBUG ((LM_DEBUG, "%d", GetLastError()));
4765           will reset errno a couple of times before GetLastError() gets
4766           called. So the result is always 0.  The fix is to say:
4768           int ret = GetLastError();
4769           ACE_DEBUG ((LM_DEBUG, "%d", ret));
4771           Thanks to Luca Priorelli <lucapri@mbox.vol.it> for noticing
4772           this.
4774         * ace/Connector.cpp (create_AST): Was missing a return 0; if we
4775           successfully register a cancellation id.  Thanks to William
4776           L. Gerecke <gerecke@rayva.org> for reporting this bug.
4778         * ace/Module.h: Added a non-existent friend class to get ACE 
4779           to stop complaining
4780           
4781           private:
4782             friend class ACE_Shutup_GPlusPlus;  // Turn off g++ warning
4783             ~ACE_Module (void);         
4784             // *Must* use dynamic allocation.
4786           Thanks to Eric Newton for the suggestion.
4788         * ace/Svc_Conf.y (ace_create_service_type): Removed some stray
4789           calls to ACE_ERROR that were left over from earlier
4790           configurations of ACE.  Thanks to Gonzalo Diethelm
4791           <gonzo@ing.puc.cl> for reporting this.
4793         * ace/Log_Msg.cpp (instance): Fixed the #ifdefs so that
4794           ACE_MT_SAFE implies ACE_HAS_THREAD_SPECIFIC_STORAGE.  Thanks to
4795           Gonzalo Diethelm <gonzo@ing.puc.cl> for reporting the need for
4796           this.
4798 Tue Aug 20 13:09:55 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
4800         * INET_Addr.cpp, line 84: Irix's C++ is not able to determine
4801           whether to use the set(u_short,ACE_UINT32,int) or the
4802           set(u_short,const char [],int), since on Irix, INADDR_ANY is 0.
4803           I cast the value so that the call would read set(port,
4804           ACE_UINT32(INADDR_ANY)) and everything went fine.  Thanks to
4805           Gonzalo Diethelm <gonzo@ing.puc.cl> for reporting this.
4807         * ace/Synch[_T]: Added a new wait() method that takes a first
4808           parameter which is the mutex used to serialize access to the
4809           condition.  This is useful if you want to store the
4810           ACE_Condition object in shared memory (in which case, the use of
4811           a reference to mutex_t doesn't work!).  Thanks to Mark Patton
4812           <mark_patton@ftw.paging.mot.com> for recommending this approach.
4814         * ace/Task.h: Added a forward template declaration for
4815           ACE_Task_Exit so that it will compile on HP/UX.  Thanks to Tim
4816           Ottinger <tottinge@csci.csc.com> for pointing this out.
4818         * ace: changed line 19 of ace/Str_Buf.h from
4820           #include "OS.h"
4822           to:
4824           #include "ace/OS.h"
4826           Fixed similar problems with OS.h at line 1154 and Dump.h at line
4827           150.  Thanks to Alan Stewart <axs2@osi.com> for reporting this.
4829 Tue Aug 20 20:18:49 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
4831         * tests/TSS_Test.cpp (main): Fixed a small typo. I was referencing
4832           the wrong variable but didn't catch it since it was in the #if
4833           !defined (ACE_HAS_THREADS) section. Fixed the typo and also 
4834           renamed the variable called big_count to iterations.  Thanks to
4835           Tim Ottinger <tottinge@csci.csc.com> for pointing this out.
4837 Mon Aug 19 19:25:50 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
4839         * {examples,apps,tests}: Removed the use of zerop from these
4840           files, as well...
4842         * ace/{Acceptor.cpp,Name_Proxy.cpp,Token.i}: Removed the use of
4843           zerop from these files, as well...
4845         * ace/Connector.cpp (connect_svc_handler): It looks like our good
4846           friend ACE_Time_Value::zerop isn't getting initialized correctly
4847           on Win32.  Therefore, I've replaced it with a direct use of
4848           &ACE_Time_Value::zero.
4850         * ace/Time_Value.cpp: Removed the static pointer variable "zerop"
4851           since there was no guarantee it was getting intialized before it
4852           is used!  Instead of using ACE_Time_Value::zerop, use
4853           &ACE_Time_Value::zero.  Thanks to William L. Gerecke
4854           <gerecke@rayva.org> for reporting this problem.
4856         * ace/OS: Added zillions of changes to make ACE compile with OSF/1
4857           and its DCE threads implementation.  Thanks to Martin Schoeckle
4858           <schoeckle@ike.uni-stuttgart.de> for sending these.
4860         * ace/config-osf1-3.2.h: Updated this file with fixes for OSF/1 by
4861           Martin Schoeckle <schoeckle@ike.uni-stuttgart.de>.
4863         * ace/ACE.cpp (handle_timed_complete): Added new logic to
4864           ACE::handle_timed_complete() so that it sets errno to
4865           ECONNREFUSED if the connection is refused by the server.  When
4866           you issue an asynchronous connect request, to complete it, you
4867           will use complete() with a timeout.  However, complete can fail,
4868           and then it will deallocate any resource, (i.e. close down the
4869           socket handle), also for timeout expiration.  So, a user
4870           interested in retrying to complete a connection while the
4871           timeout expires will not use complete(); but rather will use
4872           handle_timed_complete().  In fact, using handle_timed_complete()
4873           the user could detect the reason of a failure (by examining
4874           errno) and decide how to proceed.  In the old ACE version the
4875           problem was that, if handle_timed_complete() failed because of
4876           the recv() returning 0, errno remained unchanged and so its
4877           value could be quite misleading with respect to the reasons of
4878           the failure.  Thanks to Antonio Tortorici
4879           <antonio@rh0011.roma.tlsoft.it> for this fix and the explanation
4880           above.
4882         * ace/OS.h: Added support for Borland 5.0's uint64.  Thanks to
4883           Hani Yakan <hani@i-online.com> for suggesting the strategy to
4884           accomplish this.
4886 Mon Aug 19 15:52:07 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
4888         * tests: Added new macros to the test_config.h file in order to
4889           simplify the testing.
4891 Mon Aug 19 00:21:22 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
4893         * Re-released version 4.0.28 for testing (will change the version
4894           number after Tim gives me the new Token stuff).
4896         * {netsvcs/lib,tests/test_config.h}: Removed spurious dependencies
4897           on fstream.h and iostream.h.  Thanks to Alan Stewart
4898           <axs2@osi.com> for reporting this.
4900 Sat Aug 17 17:25:49 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
4902         * ace/Reactor: Removed the use of "inline" in the Reactor.cpp
4903           files because this was causing problems with some
4904           compilers/linkers.  Thanks to Gonzalo Diethelm
4905           <gonzo@ing.puc.cl> for recommending this.
4907         * examples/Misc/test_XtReactor1.cpp: Added a new test of the
4908           XtReactor, courtesy of Eric Newton <ecn@clark.net>.
4910         * ace/config-hpux-10.x.h: According to Eugene K. Plaude
4911           <jec@r-style.msk.su>, HP-UX 10.01 supports user-level threads
4912           based on the pthreads interface specified by POSIX in 1003.4a,
4913           Draft 4 (which is basically DCE threads).  Therefore, I've
4914           enabled the ACE_HAS_DCETHREADS symbol in the config-hpux-10.x.h
4915           configuration file.  If this isn't correct, please let me know.
4917 Sat Aug 17 02:18:39 1996  Tim H. Harrison  (harrison@lambada.cs.wustl.edu)
4919         * examples/Tokens/manual/README: Added a new Token example
4920           application.  The manual test gives users a text-based
4921           interactive interface to local or remote tokens.  This is
4922           extremely useful for manually testing the token server and
4923           setting up deadlock scenarios.  See the README file for more
4924           details.
4926         * examples/Tokens/deadlock/README: Updated the deadlock example
4927           application to test the new deadlock detection algorithm for
4928           readers/writer locks.  I also added the use of Token Invariants
4929           to ensure correctness of the mutexes and readers/writer locks.
4930           See the README file for more details.
4932 Fri Aug 16 22:16:05 1996  Tim H. Harrison  (harrison@lambada.cs.wustl.edu)
4934         * ace/Token_Manager.cpp: Updated all Token code to use
4935           ACE_OS::last_error instead of errno.
4937 Fri Aug 16 00:03:24 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
4939         * After a long hiatus, released version 4.0.28 for testing.
4941 Thu Aug 15 21:04:35 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
4943         * man: Updated all the ACE manual pages and html pages to reflect
4944           recent changes.
4946         * netsvcs/lib/Server_Logging_Handler.cpp: Fixed an omitted
4947           "ACE_BUILD_SVC_DLL" that was causing linker errors on NT.
4948           Thanks to Luca Priorelli <lucapri@mbox.vol.it> for reporting
4949           this.
4951         * examples/Log_Msg/test_log_msg.cpp: Added a test for the new
4952           log_hexdump() function.
4954         * ace/Log_Msg.cpp (log_hexdump): Integrated the log_hexdump() code
4955           into the ACE Log_Msg abstraction.  Thanks to Luca Priorelli
4956           <lucapri@mbox.vol.it> for fixing this and for Todd Montgomery
4957           for originally supplying the code.
4959         * ace/Signal.cpp (ACE_Sig_Handlers): Moved the #endif /* HPUX */
4960           down to the end of the file so that it works correctly on HPUX.
4961           Thanks to Eric C. Newton <ecn@clark.net> for report this bug.
4963         * ace/OS.i: Updated the behavior of thr_join() so that it will do
4964           a ::CloseHandle after getting the exit status.  Thanks to the
4965           ever vigilant James Mansion
4966           (mansionj@lonnds.ml.com) for noticing this.
4968         * examples: Finally added Tim and Prashant's examles/OS directory,
4969           which contains a test that illustrates a "portable" means to
4970           spawn processes on NT and UNIX.
4972         * ace/Malloc_T.cpp (next): Added an overloaded next() method that
4973           returns the name that is bound to the pointer in the
4974           Malloc_Iterator.  This is useful in order to differentiate
4975           entries in the pool based on their name.  Thanks to Kim Gillies
4976           <gillies@noao.edu> for suggesting this.
4978         * ace: Changed all uses of thread_t, thread_key_t, mutex_t,
4979           rwlock_t, sema_t, cond_t, etc. to ACE_* in order to avoid
4980           polluting the name space.  Also switched from using macros to
4981           using typedefs whereever possible.  Thanks to Gonzalo Diethelm
4982           <gonzo@ing.puc.cl> for recommending this.
4984         * ace/System_Time.cpp: Added template specializations for
4985           templates used in the ACE_System_Time class.  This should solve
4986           some nasty undefined templates problems with GCC...  Thanks to
4987           Joseph DeAngelis <bytor@faxint.com> for pointing out the
4988           problem.
4990         * ace/Name_Space.cpp: Fixed the file Name_Space.cpp as follows:
4992           // Name_Space.cpp
4993           #define ACE_BUILD_DLL
4994           //#include "Name_Space.h"
4995           #include "ace/Name_Space.h"     
4997           Thanks to Eugene K. Plaude <jec@r-style.msk.su> for fixing this!
4999         * ace/config-hpux-10.x.h: Added support for TLI since according to
5000           Eugene K. Plaude <jec@r-style.msk.su> this should work.  If not,
5001           please let me know.
5003 Wed Aug 14 21:29:46 1996  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
5005         * examples/Reactor/Logger: rearranged the Logger directory so it
5006           would be more clear what the client and server programs did and
5007           how to run them.
5009         * examples: Merged the contents of the SVR4 examples directory
5010           into the IPC_SAP/SOCK_SAP directory so that we can remove the
5011           SVR4 directory altogether (it wasn't contributing much...).
5013         * examples: Removed the vestigal Win32 tests since ACE now runs on
5014           Win32 and we don't need a separate test directory.
5016         * netsvcs/client: Renamed the file remaining file in this
5017           directory to logging_app.cpp since I moved the other file to the
5018           examples/Reactor/Logger directory.
5020         * ace/Reactor.cpp (check_handles): If eh->get_handle() returns -1
5021           the select() code will index the [-1] element of an array.  To
5022           fix this, I've added a check of the value returned from
5023           eh->get_handle().  Thanks to Eric C. Newton <ecn@clark.net> for
5024           reporting this.
5026         * ace/OS.i (sema_wait): Fixed a subtle bug in the Pthreads
5027           wrappers that surfaced on the SGI IRIX 6.2 port.  There was some
5028           code that looked like this:
5030           pthread_cleanup_push();
5031           int result = 0;
5032           ...
5033           pthread_cleanup_pop();
5034           return result;
5036           However, on Irix 6.2, the push introduces a new scope that is
5037           closed by the pop, so result goes out of scope before returning.
5038           Thanks to Gonzalo Diethelm <gonzo@ing.puc.cl> for pointing this
5039           out.
5041         * ace/OS.h: Changed the definition of pthread_mutex_t and
5042           pthread_cond_t to mutex_t and cond_t to be consistent with other
5043           usage in ACE.  Thanks to Gonzalo Diethelm <gonzo@ing.puc.cl> for
5044           pointing this out.
5046 Wed Aug 14 01:25:47 1996    <harrison@samba.cs.wustl.edu>
5048         * ace/SPIPE_Acceptor.cpp: Added the PIPE_TYPE_MESSAGE |
5049           PIPE_READMODE_MESSAGE flags to CreateNamedPipe pipe options so
5050           that data is received in messages rather than as a stream.  This
5051           is consistent with the behavior of the SPIPE_Connector.  When we
5052           have time, we need to extend the interface so that stream pipes
5053           are also supported, as well.
5055         * SPIPE_Acceptor.cpp: Made the ACE SPIPE in and out buffer sizes
5056           10 k.  The previous size was just 512 bytes.  This larger buffer
5057           size helps decrease flow control.
5059 Tue Aug 13 23:21:46 1996    <harrison@samba.cs.wustl.edu>
5061         * examples/Connection/blocking: Updated the blocking SPIPE example
5062           application to use a pool of threads in the proactor to handle
5063           incoming client messages.  The SPIPE-acceptor example
5064           illustrates how named pipes are used on NT. Once the server
5065           establishes a connection to a single client, it spawns a thread
5066           pool to handle incoming requests via the proactor event
5067           loop. That is, a separate thread from the pool is used to
5068           process each message sent by a client.  The size of the thread
5069           pool can be specified by command-line arguments.  This example
5070           leverages the queueing performed by the NT kernel to trivially
5071           implement a thread pool architecture.  See
5072           examples/Connection/blocking/README for more details.
5074         * Service_Config.h: Added a <thread> parameter (with a default
5075           size of 0) to the proactor accessor method.  This allows
5076           applications to specify the size of the thread pool that can
5077           block on Proactor::handle_events.
5079 Tue Aug 13 02:30:58 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
5081         * ace/Task: Added a new public interface called thr_count().  This
5082           returns a count of the number of threads running within a Task.
5083           If the value returned is 0, then the Task is a Passive Object.
5084           If the value returns is > 0 the task is an Active Object, and
5085           the value is a count of the number of threads running within the
5086           object at this snapshot of time.
5088         * ace/OS: I implemented Karlheinz's suggested optimizations for
5089           the ACE condition variable implementation under Win32.  Here's
5090           the deal...  The original implementation used an internal_mutex
5091           to ensure that access to the count of the number of waiters was
5092           serialized between the waiter and signaler threads.  The new
5093           implementation is designed so that only the waiter threads
5094           access the waiter count.  Therefore, we can utilize the
5095           external_mutex to serialize access to this, thus eliminating the
5096           need for the internal_mutex.  However, this means that code
5097           *must* be written using the standard condition variable idiom,
5098           i.e.,
5100           int resources ()
5101           {
5102             external_mutex.acquire ();
5103             
5104             // ...
5106             cond.signal ();
5107             external_mutex.release ();
5108           }
5110           Rather than like this:
5112           int resources ()
5113           {
5114             external_mutex.acquire ();
5115             
5116             // ...
5117             
5118             external_mutex.release ();
5119             cond.signal ();
5120           }
5122           which is what some thread programming books recommend as an
5123           optimization.  However, you should be careful not to use this
5124           form since it can lead to "lost wakeup" bugs caused by the fact
5125           that the implementation of ACE_OS::cond_signal will test if the
5126           waiter count > 0 *without holding any locks*!!!
5128           Fortunately, ensuring this shouldn't be a problem since most ACE
5129           code uses the following idiom:
5130           
5131           int resources ()
5132           {
5133             ACE_Guard mon (external_mutex);
5134             
5135             // ...
5137             cond.signal ();
5138             // Destructor of mon releases external_mutex.
5139           }
5140           
5141           Clearly, there are subtle tradeoffs between performance and
5142           programmability here...
5144         * ace/Synch: Updated all of the ACE semaphore wrappers to take the
5145           new "max" value as their final constructor argument.
5147         * ace/OS: Added a new default argument to the end of the
5148           sema_init() method.  This allows us to specify the maximum value
5149           of the semaphore (this is only important on NT).  Currently, it
5150           is hard-coded to 0x7fffffff in uses.  The new approach makes it
5151           possible to set the max to a different value.  Thanks to
5152           Karlheinz for requesting this.
5154         * ace/Message_Queue.cpp: Added an implementation of the dump().
5155           Thanks Karlheinz.
5157         * ace/Synch.cpp: Added an implementation of the dump() method.
5158           Thanks Karlheinz.
5160         * ace: Updated all usage of ACE_Thread_Mutex_Guard so that it now
5161           uses the ACE_GUARD* macros correctly.  Thanks to Chris Eich
5162           <Chris_Eich@optilink.optilink.dsccc.com> for pointing out the
5163           need for this.
5165         * examples/Threads: Added Karlheinz's new test_barrier2.cpp test
5166           program that makes sure that the ACE_Message_Queues are working
5167           correctly when accessed by multiple threads.
5169         * netsvcs/lib/Server_Logging_Handler.cpp (handle_logging_record):
5170           Fixed an errant use of ACE_Guard, which wasn't properly checking
5171           of the Guard acquired the lock.  Thanks to Chris Eich
5172           <Chris_Eich@optilink.optilink.dsccc.com> for pointing this out.
5174         * ace/OS.h (ACE_GUARD): Added default "ace_mon" implementations of
5175           type ACE_Null_Mutex even in cases where there's no threading
5176           defined so that code accessing ace_mon.release() and
5177           ace_mon.acquire() will compile correctly.
5179         * apps/Gateway/Gateway/Channel.h:  Fixed the code so
5180           that we don't try to use TLI if the platform doesn't support it
5181           (instead, we'll use sockets).  Thanks to Marius Kjeldahl
5182           <marius@funcom.no> for reporting this problem.
5184         * examples/ASX/Event_Server/{Supplier,Consumer}: Fixed the code so
5185           that we don't try to use TLI if the platform doesn't support it
5186           (instead, we'll use sockets).  Thanks to Marius Kjeldahl
5187           <marius@funcom.no> for reporting this problem.
5189 Mon Aug 12 14:50:47 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
5191         * examples/Misc: Added Eric Newton's <ecn@clark.net> test case for
5192           his XtReactor integration.
5194         * ace: Included Eric Newton's <ecn@clark.net> code that integrates
5195           ACE with the Xt event loop.  This still needs a bit of work
5196           (e.g., making it thread-safe and incorporating signal support), so
5197           I haven't added it to the Makefile yet.  If someone can take the
5198           time to fix it up, I'll be happy to integrate it into ACE.
5200         * ace/Message_Queue.cpp (dequeue_head): Fixed the mother of all
5201           bugs in the ACE_Message_Queue implementation...  The problem was
5202           that I was trying to be too clever by optimizing the number of
5203           Condition::signal() calls by only calling signal() when the
5204           queue changed state from empty to non-empty (or full to
5205           non-full).  It turns out that this optimization works fine for a
5206           single producer/consumer case, but fails when there are multiple
5207           consumers.  The fix was just to call signal() every time.  This
5208           should be ok because the underlying Condition variable
5209           implementation will perform the optimization in the correct
5210           fashion.  Thanks to the omniscient Karlheinz for detecting this
5211           problem and reporting it.
5213 Sun Aug 11 15:52:07 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
5215         * tests: Made minor changes to test_config.h, SPIPE_Test.cpp, and
5216           UPIPE_SAP_Test.cpp to accomodate the change made to SPIPE_Addr.
5217           SPIPE_Addr now accepts a string of the form [host:]port and then
5218           creates the rendezvous point. Originally, SPIPE_Addr would
5219           assume that the string being passed in was the actual rendezvous
5220           point. 
5222 Sat Aug 10 18:41:21 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
5224         * netsvcs/lib/Logger.cpp (init): Added a new service to netsvcs
5225           called ACE_Logger which allows us to control the output of all
5226           the services. The ACE_Logger service can be invoked with
5227           different flags (such as STDERR|OSTREAM) which in turn sets
5228           ACE_Log_Msg to direct the output of all the services to the
5229           appropriate stream(s). Note that if a service needs to stay
5230           unaffected from ACE_Logger, it should be invoked before
5231           ACE_Logger gets invoked. Also note that like other services in
5232           netsvcs, ACE_Logger can also be dynamically linked in.
5234 Sat Aug 10 14:23:07 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
5236         * Added Steve Huston's <shuston@ultranet.com> patches to get ACE
5237           to compile on UnixWare 2.01.  This mostly involved changes to
5238           the internal types used by the socket wrappers.  Thanks Steve!
5240 Fri Aug  9 01:34:19 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
5242         * examples/ASX/UPIPE_Event_Server/Options.cpp (print_results):
5243           Added a typedef to avoid problems if a platform doesn't support
5244           prusage_t.  Thanks to Marius Kjeldahl <marius@funcom.com> for
5245           reporting this.
5247         * include/makeinclude/platform_linux_pthread.GNU.  The line that
5248           say:
5250           LIBS    = -lpthreads -lstdc++
5252           was modified to say:
5254           LIBS    += -lpthreads -lstdc++
5256           Thanks to Marius Kjeldahl <marius@funcom.com> for reporting
5257           this.
5259 Fri Aug  9 18:26:16 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
5261         * ace/Local_Name_Space.cpp (reset): Fixed a subtle (yet very
5262           annoying bug). In switching contexts a test program would hang
5263           after a certain number of switches. Having gone through the code
5264           thoroughly and with the aid of Purify, the bug was narrowed down
5265           to an extraneous delete taking place in
5266           ACE_Name_Space::reset(). Essentially, we do not need to delete
5267           ACE_Name_Space_Map::instance() which is actually the
5268           SHARED_MALLOC since it gets deleted in the destructor of
5269           ACE_Local_Name_Space.
5271 Thu Aug  8 17:55:20 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
5273         * ace/SPIPE_Addr.cpp (set): Implemented
5274           ACE_SPIPE_Addr::string_to_addr(). Modified ACE_SPIPE_Addr::set()
5275           using code provided by Brad Flood to create the rendezvous
5276           point. Note that originally ACE_SPIPE_Addr constructor and set()
5277           would take the actual rendezvous point but now they rely on
5278           being passed a string which is of the format "[host]:port"
5279           (where host is optional). The rendezvous point is then created
5280           by extracting from the string the hostname (if any) and also
5281           using the port number as the unique pipe name. Note that this
5282           approach works on both UNIX and Win32.
5284 Mon Aug  5 20:15:59 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
5286         * ace/OS.i (last_error): Fixed a typo. In the set and get methods
5287           last_error(), there should be a check for "if defined
5288           (ACE_WIN32)" and not "if defined (ACE_HAS_WIN32)"
5290 Wed Aug  7 00:21:42 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
5292         * ace/Log_Msg.h: Replaced all uses of errno *following calls to
5293           ACE_Log_Msg::instance()* so that we first cache errno in a local
5294           variable called __ace_errno.  We need to do this because
5295           ACE_Log_Msg::instance() can reset errno == 0.  Thanks to 
5296           Tim for pointing this out.
5298 Mon Aug  5 20:15:59 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
5300         * ace/OS.i (last_error): Fixed a typo. In the set and get methods
5301           last_error(), there should be a check for 
5302           "if defined (ACE_WIN32)" and not "if defined (ACE_HAS_WIN32)"
5304 Sat Aug  3 14:52:32 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
5306         * examples/Win32/win32_client.cpp: Changed ACE_GUARD_RETURN to
5307           ACE_GUARD in the method Errno::flags since the return type is
5308           void. 
5310         * examples/Connection/non_blocking/CPP-connector.cpp: Made some
5311           minor changes to get things compiling on Win32. The call to
5312           handle_close now takes zero as the first argument (which is
5313           never used). Also the arguments to ACE_SERVER_ADDRESS are now
5314           swapped (hostname followed by port number) to be consistent with
5315           the change made to the macro. Thanks to Brad Flood for
5316           suggesting these changes. 
5318         * examples/Connection/non_blocking/CPP-acceptor.cpp: Made minor
5319           changes to some of the methods to make sure all control paths
5320           return a value. Also changed the default port number to
5321           ACE_DEFAULT_SERVER_PORT_STR to match what the connector tries to
5322           connect to. Thanks to Brad Flood <BFLOOD@slc.unisysgsg.com> for
5323           suggesting these changes.
5325         * ace/OS.h (ACE_SERVER_ADDRESS): Modified the macro
5326           ACE_SERVER_ADDRESS so that it creates a string of a server
5327           address with a "host:port" format. Previously the order was
5328           reversed. Thanks to Brad Flood for suggesting this change.
5330 Sat Aug  3 00:07:26 1996  Douglas C. Schmidt  (schmidt@lambada.cs.wustl.edu)
5332         * ace: Fixed problems with recursive tracing of ACE_TRACE by
5333           commenting out certain constructors in IPC_SAP.cpp,
5334           FIFO_Send_Msg.cpp, FIFO_Send.cpp, and FIFO.cpp.  Thanks to
5335           Karlheinz for finding and reporting these fixes.
5337 Fri Aug  2 22:19:05 1996  Douglas C. Schmidt  (schmidt@lambada.cs.wustl.edu)
5339         * ace/ACE.cpp (format_hexdump): Fixed an infamous "off by one" bug
5340           that was causing this to fail on Win32 (time to switch to Java? ;-)).
5341           Thanks to lucapri@mbox.vol.it for finding this.
5343 Thu Aug  1 14:08:30 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
5345         * ace/CORBA_Handler.cpp (activate_service): Fixed a typo caused by
5346           an omitted ENDTRY.  Thanks to Garrett Conaty
5347           <gconaty@outbackinc.com> for noticing this.
5349 Mon Jul 29 10:03:16 1996  Douglas C. Schmidt  (schmidt@lambada.cs.wustl.edu)
5351         * examples/Win32/win32_client.cpp: There was a typo in one of the
5352           ACE_GUARD macros.  Thanks to Tim Ottinger
5353           <tottinge@csci.csc.com> for pointing this out.
5355 Mon Jul 22 12:41:22 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
5357         * ace/Local_Name_Space.cpp (reset): Added a new method
5358           ACE_Name_Space_Map::reset() which deletes the instance of
5359           ACE_Name_Space_Map. This forces instance() to create a new
5360           instance using a new context file in the case of the context
5361           having changed. I make use of this in
5362           ACE_Local_Name_Space::create_manager().
5364 Fri Jul 19 12:28:07 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
5366         * ace/System_Time.cpp (get_master_system_time): Modified
5367           ACE_System_Time::get_master_system_time() so that if an entry
5368           for the time is not found in shared memory (indicating that no
5369           Clerk is running), then we should just return the local time of
5370           the host.
5372         * netsvcs/lib/TS_Clerk_Handler.cpp (update_time): Modified
5373           ACE_TS_Clerk_Handler::update_time() so that if the Clerk is not
5374           connected to any servers, is sets the delta time to zero
5375           allowing clients to then use the local time of the host.
5377 Wed Jul 17 22:19:53 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
5379         * ace/UPIPE_Connector.cpp (connect): Added an #ifdef around the
5380           check of ACE_OS::isastream (handle) in
5381           ACE_UPIPE_Connector::connect() since the call is not supported
5382           on NT.
5384 Thu Jul 11 22:22:57 1996  Tim H. Harrison  (harrison@lambada.cs.wustl.edu)
5386         * ace/OS.i (kill): Modified ACE_OS::kill so that it works on NT.
5387           It takes a process ID, creates a handle for the associated
5388           process, and calls TerminateProcess on the handle.  This is
5389           actually pretty dangerous according to the NT documentation.
5390           Can majorly confuse DLLs.  Does the same old thing on UNIX.
5392         * ace/OS.cpp (fork_exec): Added a fork_exec operation to ACE_OS.
5393           This works on UNIX and NT.  It combines the forking and exec'ing
5394           into one call.  This has to be combined since Win32
5395           CreateProcess only starts applications from scratch (unlike UNIX
5396           fork).
5398         * examples/OS/test_os.cpp: Added a new example application to test 
5399           the new ACE_OS::fork_exec and ACE_OS::kill operations.
5401 Tue Jul  9 13:04:14 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
5403         * ace/Service_Manager.cpp (reconfigure_services): To improve
5404           portability on Win32 and UNIX I replaced the use of a signal to
5405           trigger reconfiguration to instead make a call to the new
5406           ACE_service_Config::reconfig_occurred() method.  This should
5407           actually perform the same as the original approach, since all
5408           the signal handler ever did was to set this flag!  Thanks to
5409           Karlheinz for pointing out the need for this.
5411         * ace/Service_Config.h: Added a new static public method called
5412           reconfig_occurred(sig_atomic_t) to set if a reconfiguration
5413           should take place the next time through the event loop.
5415 Mon Jul  8 14:20:01 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
5417         * ace/Time_Value.h: Added "ACE_Export" before all global operators
5418           to allow them to be dll-exportable on NT.
5420 Mon Jul  8 13:12:05 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
5422         * ace/{Message_Block,DEV_IO,SPIPE_Stream}.cpp: Fixed several more
5423           cases of delete array that should have been delete [] array.
5424           Thanks to Tom Leith for pointing out some of these.  I can hear
5425           the ghost of James Mansion coming closer... ;-)
5427         * INSTALL: Added tips on how to install ACE on a Win32 platform
5428           that lacks a network card.
5430         * ChangeLog: Split ChangeLog-96 into two files (ChangeLog-96a and
5431           ChangeLog-96b) since it was becoming quite large!  Thanks to
5432           Chris Lahey for pointing this out.
5434         * ace/Stream.cpp: Was missing a "return 0;" at the end of the
5435           close() method.  Thanks to Tom Leith <trl@icon-stl.net> for
5436           finding this.
5438 Mon Jul  8 14:20:01 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
5440         * ace/Time_Value.h: Added "ACE_Export" before all global operators
5441           to allow them to be exportable from Win32 DLLs.
5443 Sun Jul  7 10:34:48 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
5445         * Released version 4.0.27 for testing.
5447         * config-sunos5.5*.h: Removed all uses of ACE_HAS_SVR4_SIGNAL_T in
5448           the config files since Solaris 2.5 has consistent signal and
5449           sigaction types (at last!).
5451         * Installed and compiled ACE successfully with the new SunC++ 4.1
5452           compiler on Solaris 2.5.  However, there seems to be major
5453           problems with the interaction of the SunC++ exception handling
5454           runtime system and the Solaris multi-threading mechanisms.  This
5455           is causing the ACE multi-threading tests to bomb with
5456           segmentation faults inside of the _ex_unwind() library function.
5457           If you read the /opt/SUNWspro_3.1/READMEs/c++ file you'll see
5458           why this problem is occurring (apparently due to bugs in the
5459           Solaris libC.so.5 C++ runtime library).
5461           There seem to be two fixes for this problem:
5462           
5463           1. Add the following to *all* threads (including main):
5464           
5465              #include <exception.h>
5467              void *my_thread_entry_point (void *) {
5468                set_terminate (abort);
5469                set_unexpected (abort);
5471                // Do real work...
5472              }
5474              This is the approach recommended by the README file in
5475              SUNWspro_3.1.  However, it is *clearly* a horrible hack and
5476              very non-portable (therefore, I deem it worthy of Microsoft
5477              ;-)).
5478           
5479           2. Compile ACE (and applications?) with -noex in order to avoid
5480              this bug.  This is clearly not desirable either since it
5481              precludes the use of exception handling with C++ and threads
5482              on Solaris...
5484           Since ACE doesn't use exceptions internally on Solaris option 2
5485           seems like the best approach for the time being.  When Sun gets
5486           it act together and releases a bug-free library and C++
5487           software, I'll fix ACE accordingly.
5489         * tests: Integrated the latest of Prashant's "one-button" tests
5490           into the main ACE release.  These will run on both UNIX and
5491           Win32 now.
5493         * ace/UPIPE_Stream.cpp (recv): Changed the semantics of the
5494           ACE_UPIPE_Stream::recv (char *, size_t, ACE_Time_Value *)
5495           method.  Currently, the behavior is to block until *exactly* N
5496           bytes are read.  However, this is incorrect for 2 reasons:
5498           1. It makes it hard to write a server that doesn't know
5499              precisely how big the messages are from the client.  In
5500              particular, if the receiver doesn't know how big the buffer
5501              messages are from the client it will block indefinitely!
5503           2. It is redundant with respect to the
5504              ACE_UPIPE_Stream::recv_n(), which also blocks until all N
5505              bytes are received.
5507           Therefore, I've made the new UPIPE_Stream::recv() method block
5508           only until it's received the first block of data that allows it
5509           to fulfill its size request, or anything that is smaller than
5510           that size.
5512         * ace/OS.cpp (thr_create): Since POSIX pthreads doesn't provide an
5513           equivalent of THR_NEW_LWP in the pthreads_attr_* functions, I've
5514           added an emulation that should work for Solaris.  Basically, if
5515           THR_NEW_LWP is set when ACE_OS::thr_create() is called, we use
5516           the ACE_OS::thr_{get,set}concurrency methods to increase the
5517           number of LWPs by one.  
5519         * ace/Message_Block: Changed the default high water mark for an
5520           ACE_Message_Queue from 4K to 16K.  This is useful since it
5521           allows applications to buffer more information before blocking.
5523         * ace/Log_Msg: Added a pair of operations that allow applications
5524           to acquire and release the synchronization lock used internally
5525           by the ACE_Log_Msg implementation.  This allows applications to
5526           hold the lock atomically over a number of calls to ACE_Log_Msg,
5527           which is useful for composite operations like the following:
5528           
5529           // Make sure the following operations are run atomically!
5530           ACE_LOG_MSG->acquire ();
5532           while (c != '!')
5533             {
5534               if (c_stream.recv (&c, 1) == -1)
5535                 ACE_DEBUG ((LM_DEBUG, 
5536                            "(%t) buffer recv from supplier failed\n"));
5537               else
5538                 ACE_DEBUG ((LM_DEBUG, "%c", c));
5539             }
5541           ACE_LOG_MSG->release ();
5543         * examples/IPC_SAP/UPIPE_SAP: Revised all of the UPIPE_Stream
5544           tests to make them more consistent and correct with respect to
5545           the new changes.
5547         * ace/Stream.cpp (link_i): There was a bug in the link_i() logic
5548           because we weren't also linking the other stream back to our
5549           stream.
5551         * ace/UPIPE_{Acceptor,Connector}: Modified both of these classes
5552           so that they don't
5554         * ace/Stream.cpp (close): Modified close() so that it now detects
5555           "double-closes" and ignores anything but the first one.
5557         * ace/UPIPE_Stream: Updated this class so that it no longer
5558           inherits from ACE_Stream (previously ACE_UPIPE_Stream had
5559           inherited from *both* ACE_Stream *and* ACE_SPIPE).  There are
5560           several reasons we shouldn't inherit from ACE_Stream:
5561           
5562           1. There are operations on ACE_Stream that don't make any sense
5563              on ACE_UPIPE_Stream (e.g., link(), unlink()).
5565           2. ACE_Stream isn't really designed to be subclassed (e.g.,
5566              it doesn't have virtual methods).
5568           3. Not inheriting makes the interface cleaner, e.g., we now use
5569              send() and recv() methods consistently, rather than
5570              send_msg()/put() and recv_msg()/get().  
5571              
5572           4. The return values from the I/O methods are now more
5573              consistent than they were before.
5575         * ace/Message_Block: The signature for the copy() method was
5576           incorrect.  It should have been copy (const char *, .....)
5577           rather than copy (char *, ....).
5579         * examples/IPC_SAP/UPIPE_SAP: Together with Prashant, fixed up the
5580           ACE_UPIPE_Stream tests so they more cleverly
5581           (and correctly) utilize and illustrate various ACE concurrency
5582           features.
5584 Sat Jul  6 18:28:55 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
5586         * ace/Stream.cpp: Fixed some obscure bugs with Stream::unlink()
5587           and Stream::link().  These bugs were triggered by the
5588           ACE_UPIPE_Stream tests.  We need to make sure that we don't have
5589           race conditions in the order in which ACE_UPIPE_Stream close()
5590           down.  Prashant and I fixed this problem by (1) adding a lock to
5591           unlink() and link() and then creating unlink_i() and link_i() to
5592           perform the work and (2) being more careful about trying to
5593           unlink our side and the other side of a linked Stream.
5595         * ace/config-linux.h: According to Istvan Buki
5596           <istvan.buki@infoboard.be>, Linux now supports the
5597           send_msg()/recv_msg() system calls, as well as UNIX domain
5598           sockets.  Therefore, I've updated the config-linux*.h file to
5599           remove the existing restrictions.  If this turns out not to be
5600           the case, please let me know.
5602         * ace/LSOCK.cpp (recv_handle): Added a change to some casts to
5603           make ACE compile with Linux.  Thanks to Istvan Buki
5604           <istvan.buki@infoboard.be> for reporting this.
5606         * apps/Gateway/Gateway/File_Parser.cpp (readword): Removed
5607           yet another use of:
5608           
5609           for (int x; foo(x); )
5610           {
5611           }
5613           x = 10;
5615           Which is now a deprecated feature of C++.
5617         * include/makeinclude: added the -lw library to the GNU G++
5618           platform*.GNU file in order to pick up the wide-character string
5619           functions.
5621 Fri Jul  5 18:11:44 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
5623         * Re-released version 4.0.26 for testing.
5625         * ace/CORBA_Handler.cpp (activate_service): Revised the code to
5626           use the Orbix macros for TRY/CATCH rather than try/catch.  We
5627           need this to make legacy code work!  Thanks to Irfan for
5628           pointing this out.
5630         * ace/Thread_Manager: Fixed a bunch of typos that grelims snuck
5631           in.  Thanks to Jack Erickson <jack@cibc.com> for reporting this.
5633         * examples/IPC_SAP/TLI_SAP/ftp-server.cpp: Fixed some typos that
5634           were causing problems on AIX.  Thanks to Greg Wilson
5635           <gvwilson@vnet.ibm.com> for reporting this.
5637         * examples/Reactor/Misc/test_time_value.cpp (operator<<): Added a
5638           "const" in front of the ACE_Time_Value & in order to make things
5639           work correctly on AIX.  Thanks to Greg Wilson
5640           <gvwilson@vnet.ibm.com> for reporting this.
5642         * ace/SPIPE_Acceptor: Fixed some missing "returns" that had sprung
5643           up in the #else arm of the SPIPE code.  Thanks to Greg Wilson
5644           <gvwilson@vnet.ibm.com> for reporting this.
5646         * apps/Synch-Benchmarks/Benchmark: Fixed a typo that was causing
5647           the application to fail to compile on AIX.  Thanks to Greg
5648           Wilson <gvwilson@vnet.ibm.com> for reporting this.
5650         * Changed all uses of virtual int init (int, char **) to virtual
5651           int init (int, char *[]) to workaround bugs with MSVC++...
5653         * ace/OS.h: for POSIX pthreads, changed the definition of the
5654           THR_SCOPE_SYSTEM macro so that it has the same value as
5655           THR_BOUND.  If this isn't done, then things don't quite work
5656           right when we implement the ACE_OS::thr_create() wrapper.
5658 Thu Jul  4 13:17:35 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
5660         * ace/Thread_Manager: Added a new method called thr_self() that
5661           *does* return a real handle that can be used by
5662           WaitForMultipleObjects, etc.  Note that this new approach
5663           cleverly caches this handle in TSS in order to cut down on
5664           search time.  Thanks to Jesper for pointing this technique out.
5666         * ace/OS.i (thr_self): After receiving comments from Jesper, undid
5667           the earlier change today that was returning a duplicated handle
5668           for ACE_OS::thr_self().  It turns out this is a bad idea because
5669           the handle most typically doesn't get released, which leads to
5670           handle leaks.  
5672         * ace/Thread_Manager: Added a new private method called
5673           check_state().  This method extends existing code to be smarter
5674           about how we check to see what "state" (e.g., suspended,
5675           cancelled, etc.) a thread is in.  The original code
5676           (which was a macro called ACE_CHECK_STATE) didn't behave
5677           correctly if we asked about the state of a thread that was
5678           different from ourselves!
5680         * ace/Thread: Modified the public interface to
5681           ACE_Thread::spawn_n() so that it now takes a void *stack[] and
5682           size_t stack_size[].  If stack != 0 it is assumed to be an array
5683           of n pointers to the base of the stacks to use for the threads
5684           being spawned.  Likewise, if stack_size != 0 it is assumed to be
5685           an array of n values indicating how big each of the
5686           corresponding stacks are.  This is useful since now we can spawn
5687           a group of threads each of which has its own custom stack and/or
5688           stack size.  Thanks to Ashish Singhai
5689           <singhai@delirius.cs.uiuc.edu> for pointing out the need for
5690           this.
5692         * apps/Synch-Benchmarks: Updated the Synch benchmarks so that most
5693           of them work again.  The trick is *not* to use ACE_OS::sleep ()
5694           (which doesn't seem to be thread-friendly...) but instead to use
5695           ACE_OS::select() as a timer.
5697         * man: updated the manual pages and html pages to reflect all the
5698           recent changes.
5700         * ace/Malloc_T.cpp (open): Added a check to make sure that if
5701           init_acquire() fails we don't let this go by undetected...
5702           Thanks to Karlheinz for pointing out the need for this.
5704         * ace/OS.i (thr_getconcurrency): Fixed a subtle bug with the
5705           ACE_OS::thr_getconcurrency() function.  I was mistakenly using
5706           ACE_ADAPT_RETVAL for the result of ::thr_getconcurrency(), which
5707           is clearly wrong!
5709         * ace/Service_Record.cpp (remove): Fixed a typo that was causing
5710           the removals of Modules in a dynamically configured Stream to go
5711           into infinite loops.
5713         * ace/OS.i (thr_self): Modified the ACE_OS::thr_self (hthread_t &)
5714           function so that it will return a *duplicate* of the current
5715           thread's pseudo-handle returned by GetCurrentThread().  This
5716           change is necessary because the pseudo-handle returned by
5717           GetCurrentThread() is pretty useless (e.g., it can't be used by
5718           any other thread to "wait" for this thread to exit).  This new
5719           behavior is used in the examples/Reactor/ReactorEx test program.
5721         * ace/Service_Config.cpp: I'd forgotten to assign the
5722           delete_svc_rep_ flag when dynamically allocating the svc_rep_.
5723           This is fixed now.
5725 Wed Jul  3 20:09:44 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
5727         * Added a new subdirectory called $WRAPPER_ROOT/tests that
5728           contains the first phase of the ACE regression tests.
5730         * ace/Reactor.cpp (check_handles): Fixed an earlier fix with the
5731           ACE_Reactor::wait_for_multiple_events() method.  The earlier fix
5732           had changed the exit condition of do/while loop to be
5733           
5734           while (nfound == -1 && this->handle_error () >= 0);
5736           However, this was causing signal handling to break...
5737           Therefore, the right fix is to keep the exit test as:
5739           while (nfound == -1 && this->handle_error () > 0);
5741           and instead fix handle_errors() so that it returns 1 if we're
5742           able to fix a bad handle...  Thanks to Prashant and Irfan for
5743           tracking this down.
5745         * ace/OS: Finally broken down and added a new pair of ACE_OS
5746           functions called "last_error()".  These basically call
5747           SetLastError/GetLastError on Win32 or they set/get errno on
5748           UNIX.
5750         * ace/config-linux.h: Fixed an annoying problem with 
5751           struct msghdr in Linux by adding
5753           #define msg_accrights    msg_control
5754           #define msg_accrightslen msg_controllen
5756           to the config-linux*.h files.  Thanks to Michael R"uger
5757           <m_rueger@syscomp.de> for suggesting this.
5759         * ace/SOCK_IO.cpp (recv): Fixed a "bug" where
5760           ACE_SOCK_IO::{send,recv} allocates with:
5762           iovec *iovp = new iovec[total_tuples];
5764           But deletes with:
5766           delete iovp;
5768           Thanks to the ever vigilant James Mansion
5769           (mansionj@lonnds.ml.com) for noticing this.
5771 Tue Jul  2 23:48:38 1996  Tim H. Harrison  (harrison@lambada.cs.wustl.edu)
5773         * ace/Service_Config.h: Added ReactorEx to the singleton resources
5774           that the Service_Configurator holds.  This includes accessors,
5775           destruction hooks, and event loop methods.
5777         * examples/Reactor/ReactorEx/README: There is a new example
5778           application for the ReactorEx.  Please check out
5779           examples/Reactor/ReactorEx/README for details.
5781 Tue Jul  2 18:43:12 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
5783         * Released version 4.0.25 for testing.
5785         * examples/ASX/Message_Queue/priority_buffer.cpp: Added a new test
5786           program that illustrates the use of the new Message_Queue
5787           priority scheme.
5789         * ace/Message_Queue: Added new support for prioritized message
5790           enqueueing into the ACE_Message_Queue.  Now, when an application
5791           uses ACE_Message_Queue::enqueue() the new Message_Block is
5792           inserted into the queue according to its msg_priority().  When
5793           dequeue_head() is used the item retrieved will then be the item
5794           of "highest priority" (priorities range from 0 to MAX_LONG).
5795           Note that the semantics of the existing enqueue methods,
5796           enqueue_head() and enqueue_tail(), remain unchanged.
5798         * ace/Message_Block: Changed the type of the priority in a message
5799           block to u_long rather than u_char.  This gives us a much
5800           greater range of priorities!
5802 Mon Jul  1 01:12:08 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
5804         * ace/Thread.h: Changed a couple of mistyped comments.  Thanks
5805           to the eagle eyes of Andres Kruse for noticing this.
5807         * ace/OS: added more comprehensive support for UNICODE to
5808           both the Win32 and UNIX OS adaptation layer.  This new
5809           support automagically selects the appropriate implementation
5810           (i.e., either char * or wchar_t *) for the string comparison
5811           routines (which are used in places like ACE_Mem_Map).
5813         * ace/Service_Config: Split up the ACE_Service_Config::close()
5814           method into two parts: close_svcs() and close_singletons().
5815           This makes it possible to remove svc.conf services without
5816           destroying Singletons like the Proactor, Reactor, etc.  Thanks
5817           to Karlheinz for recommending this.
5819         * ace/Service_Config: Added flags for remembering who created the
5820           Singleton Proactor, Allocator, Thread_Manager, and
5821           Service_Repository (in addition to the Reactor, which I did last
5822           week).  If we created these Singletons, then we are responsible
5823           for freeing them up.  Thanks to Karlheinz for pointing out the
5824           need for this.
5826 Mon Jul  1 16:26:27 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
5828         * ace/Connector.cpp: Added two new arguments to connect () namely,
5829           "int flags" and "int perms". The Connector can now pass these
5830           two arguments to its template arguments (e.g., SOCK_Connector,
5831           SPIPE_Connector, etc.) when calling their connect() method.  A
5832           consequence of doing this was that we had to modify the
5833           signature of the connect() method on some of the IPC_SAP classes
5834           (e.g., TLI_Connector, SOCK_Connector, and LSOCK_Connector).  
5835           Note that these changes may break some existing code,
5836           particularly with TLI_Connector (see below), so beware...
5838         * ace/TLI_Connector.cpp: Changed the order of the connect()
5839           arguments to be more consistent with the rest of the IPC_SAP
5840           classes used with the Connector.  Please note that existing
5841           examples which use TLI_Connector may need to be modified as a
5842           result of this change.
5844         * ace/OS.i (open): Modified ACE_OS::open() to use the argument
5845           perms to turn the flag FILE_FLAG_OVERLAPPED on and off for
5846           Win32.
5848         * ace/Service_Config.cpp (end_proactor_event_loop): Added new
5849           methods run_proactor_event_loop() and end_proactor_event_loop()
5850           which call handle_events on the Proactor.
5852 Mon Jul  1 02:15:34 1996  Tim H. Harrison  (harrison@lambada.cs.wustl.edu)
5854         * ace/Proactor.h: Made ACE_Proactor an ACE_Event_Handler so that
5855           it can be registered with the ACE_ReactorEx.  ACE_Proactor
5856           associates the same global HANDLE with every overlapped I/O
5857           operation.  This global HANDLE can be registered with the
5858           ACE_ReactorEx.  Therefore, by using the
5859           ACE_Proactor::handle_signal method as an adapter, we can now
5860           dispatch overlapped I/O and other "waitable" objects from a one
5861           ACE_ReactorEx running in a single thread of control.  Thanks to
5862           James Mansion <mansionj@lonnds.ml.com> for setting us on the
5863           right path!
5865         * ace/ReactorEx.h: Added a ACE_ReactorEx to encapsulate Win32
5866           WaitForMultipleObjects().  The ACE_ReactorEx handle_events()
5867           method calls ACE_Event_Handler::handle_signal when the
5868           corresponding Win32 HANDLE becomes signaled.  This gives us a
5869           uniform abstraction for dispatching all "waitable" objects on
5870           Win32, including events related to I/O completion ports and
5871           events related to other forms of NT synchronization (such as
5872           mutexes, semaphores, threads, etc.).
5874         * ace/Timer_Queue.h (calculate_timeout): Added a calculate_timeout
5875           method to ACE_Timer_Queue.  Also removed the same method from
5876           ACE_Reactor.  This is so Reactor, ReactorEx, and Proactor can
5877           all reuse the calculations required by the Timer_Queue without
5878           duplicating code.