Cleanup ACE_HAS_PTHREAD_SIGMASK_PROTOTYPE, all platforms support it so far as I can...
[ACE_TAO.git] / ACE / ChangeLogs / ChangeLog-1996a
blob5aa3c9b69fcce96dbb5cc039f5b83c10b8c1ba3f
1 Sun Jun 30 15:28:43 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3         * ace/OS.i (cond_timedwait): Fixed the implementation of the
4           ACE_OS::cond_timedwait() wrapper such that if the
5           caller-specified timeout elapses without the condition variable
6           being signaled that errno is always set to ETIME.  This fixes
7           some inconsistencies that occurred with POSIX pthreads and Win32
8           threads.  Thanks to Ross Dargahi <rossd@acm.org> for pointing
9           this out.
11         * ace/SOCK.cpp: Changed SOCK::close() to use the new
12           ACE_OS::closesocket() call.  This should fix some weird bugs
13           that have been lurking in the code for some time now!
15         * ace/OS: Added a new method to ACE_OS called closesocket().  This
16           handles the differences between Win32 and UNIX in their
17           treatment of sockets (e.g., NT requires the use of
18           closesocket(), whereas UNIX requires the use of close().  Thanks
19           to Irfan, Prashant, and Tim for figuring this one out!
21 Sat Jun 29 21:23:04 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
23         * ace/SPIPE_Acceptor.cpp (create_new_instance): Added the flag
24           (FILE_FLAG_OVERLAPPED) in call to CreateNamedPipe.
26 Fri Jun 28 01:31:24 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
28         * ace/Svc_Handler.cpp (open): Fixed a small typo that caused a
29           compile error if the DEBUGGING macro was enabled.  Thanks to
30           Irfan for finding this.
32 Wed Jun 26 03:19:27 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
34         * ace/Synch_T.cpp (ts_get): The tss object allocated off the heap
35           should be released if setspecific fails.  Thanks to John Lu
36           <johnlu@f1.telekurs.ch> for reporting this.
38         * ace/CORBA_Handler.cpp (handle_input): changed ACE_OS::send and
39           ACE_OS::recv to ACE::send and ACE::recv respectively in
40           CORBA_Handler.cpp.  Thanks to Irfan for pointing this out.
41           
42         * ace/Service_Config: slightly modified the Service_Config.[h,cpp]
43           in order to make it possible to create an ACE_Service_Config
44           with an external ACE_Reactor as a parameter.  On creation I was
45           handling this partly correct (i.e., not creating a new reactor).
46           However, there was no flag for remembering this for a later
47           deletion.  Thus, on deletion I was doing a delete on the Reactor
48           regardless of who created it.  This is now fixed.  Thanks to
49           Karlheinz for pointing this out.
51         * examples/ASX/CCM_App/CCM_App.cpp: Changed all uses of init (int,
52           char **) to init (int, char *[]) to work around a "feature" with
53           MSVC++ 4.x...  Thanks to Karlheinz for pointing this out.
55         * ace/OS.h: Added a new typedef of TCHAR to be compatible with
56           Win32 UNICODE type names...
58         * ace/{Mem_Map,DEV_Addr,SPIPE_Addr,FILE_Addr}: Added UNICODE
59           support for Win32 to all interfaces that require filenames.
61         * ace/{SPIPE_Stream,SOCK_IO,FILE_IO,DEV_IO}: Added a new pair of
62           send()/recv() methods that take ACE_OVERLAPPED pointers in order
63           to make it possible to integrate seamlessly with Win32
64           overlapped I/O.  Naturally, these methods are simply
65           "callthroughs" to the ACE_OS versions...
67         * ace/OS: Added a new pair of send()/recv() methods that take
68           ACE_OVERLAPPED pointers in order to make it possible to
69           integrate seamlessly with Win32 overlapped I/O.
71         * ace/SPIPE_Acceptor: Factored out common code in the Win32
72           implementation of ACE SPIPES (which uses Win32 Named Pipes, of
73           course ;-)).
75         * ace/SPIPE_Acceptor.h: Removed a vestige of the past --
76           ACE_SPIPE_LISTENER_H should be ACE_SPIPE_ACCEPTOR_H...
78 Wed Jun 19 19:35:12 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
80         * ace/SPIPE_{Acceptor,Connector}: Modified SPIPE_Acceptor and
81           SPIPE_Connector to implement Named Pipes on NT.  The public
82           interface remains the same.
84 Sun Jun 16 00:45:41 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
86         * ace/Service_Config: Provided public accessor methods for the
87           following data memebers of the ACE_Service_Config:
89                 reconfig_occurred_
90                 end_event_loop_
92           Thanks to Steve Warwick <sjw@aesthetic.com> for suggesting this.
94         * ace/Synch*: Added UNICODE support for the ACE synchronization
95           classes (e.g., ACE_Mutex, ACE_RW_Mutex, ACE_Semaphore, etc.).
97         * ace/OS: Added UNICODE support for the ACE_OS::dl_open()
98           function, as well as the ACE_OS synchronization functions.
100         * ace/CORBA_Handler: Added Seth's changes for Orbix 2.0.
102 Sat Jun  1 13:30:55 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
104         * ace/Memory_Pool.cpp (remap): Fixed a bug in
105           ACE_MMAP_Memory_Pool::remap (). The test for whether or not the
106           addr falls within the range had a '!' (not) missing, that is, it
107           was failing when it should be succeeding and vice versa.
109 Sun Jun  9 00:01:44 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
111         * Released version 4.0.24 for testing.
113         * ace: Changed all uses of ACE_Guard<LOCK> m (lock_) to ACE_GUARD
114           (LOCK, lock_), which is a macro that is defined as follows:
116           ACE_Guard<MUTEX> ace_mon (LOCK); \
117             if (m.locked () == 0) return;
119           The reason we need this is (1) detect locking failures, rather
120           than have things fail silently and (2) to automatically detect
121           deadlock in the Reactor.  In addition, I also added
122           ACE_GUARD_RETURN, which is similar to ACE_GUARD, except that it
123           returns a "failure" status when the lock is not acquired.
124           Thanks to Karlheinz for suggesting this.
126         * ace/Log_Msg: Added the new thr_state() accessors to Log_Msg.
128         * ace/Thread_Manager.cpp: factored out some common code by having
129           the public interfaces (like resume() and suspend()) utilize the
130           protected interfaces (like resume_thr() and suspend_thr()).
132         * ace/Thread_Manager.cpp: Added sanity checks for suspend(),
133           resume(), cancel(), etc. so that we don't blow up if someone
134           tries to perform an operation on an invalid thread id.
136         * ace/Thread_Manager: Added a suite of new methods for
137           (1) cooperatively "canceling" threads and (2) testing if threads
138           are cancelled (also added similar checks to test if threads are
139           suspended or resumed).  The cooperative cancellation mechanism
140           is based on a design fleshed out with Detlef and Karlheinz.
141           It's essentially a compromise between the powerful mechanisms
142           available via POSIX pthreads vs. the totally lame mechanisms
143           available in Win32.
145           Here's how it all works:
147           1. Added several new methods to ACE_Thread_Manager:
149              cancel(thr_id);     -- cancels thr_id
150              cancel_all();       -- cancels all the threads in a Thread_Manager
151              cancel_grp(grp_id); -- cancels a group of threads in a Thread_Manager
152              testcancel(thr_id); -- returns "true" if thr_id has been cancelled
154           2. Updated ACE_Log_Msg to maintain the current state of a thread
155              in thread-specific-storage (TSS).  Actually, it's more clever
156              than that since I really keep a *pointer* to the state of a
157              thread in TSS.  This pointer actually points *back* to the
158              ACE_Thread_State field in the ACE_Thread_Manager!  I use it
159              as a cache as follows:
161              ACE_Thread_Manager::testcancel (thread_t t_id)
162              {
163                ACE_MT (ACE_Thread_Mutex_Guard m (this->lock_));
165                // Try to get the cached value out of TSS to avoid lookup. 
166                ACE_Thread_State *thr_state = ACE_LOG_MSG->thr_state (); 
168                if (thr_state == 0) 
169                { // We need to init the cache.
170                  int i = this->find (t_id); 
171                  if (i == -1) return -1; 
172                  // Update the TSS cache. 
173                  ACE_LOG_MSG->thr_state (thr_state = &this->thr_table_[i].thr_state_); 
174                } 
175                return *thr_state == ACE_THR_CANCELLED;
176              }
178              Note that this allows me to avoid searching the
179              Thread_Manager on every Thread_Manager::cancel() access
180              except the first one!
182           3. I've updated the examples/Threads/test_thread_manager.cpp
183              test file to exercise the new cooperative thread cancellation
184              scheme.  It basically spawns a bunch of threads that go into
185              their own event loops doing
187              if (thr_mgr ()->testcancel (ACE_Thread::self ()) != 0)
188                break;
190              every so often.  Naturally, the main thread cancels them by saying
191    
192              thr_mgr ()->cancel_grp (grp_id);
194              when it wants to inform them to shut down.
196         * ace/Thread_Manager: Moved the Thread_State enum from the
197           ACE_Thread_Descriptor class to OS.h and renamed it to be
198           ACE_Thread_State.  This will make it easier to integrate the
199           state of a thread in thread-specific storage...
201 Sat Jun  8 13:35:17 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
203         * ace/OS.i (sema_post): revised the implementation of the POSIX
204           Pthreads semaphore implementation just a bit in order to make it
205           slightly more efficient (it now releases the mutex before
206           signaling the condition variable).
208         * ace/OS.i and config-aix.4.1.h: added a fix that separates the
209           decision about whether optlen is a pointer from the decision of
210           the type of optlen.  This fixes a problem on AIX.  Thanks to Bob
211           Olson <olson@mcs.anl.gov> for this fix.
213         * ace/Proactor.h: Fixed a small glitch that was causing some
214           compilers to break due to the fact that they can't grok fully
215           qualified destructor syntax in the class definition.  Thanks to
216           Alfred Keller <kellera@pop.eunet.ch> for reporting this.
218         * ace/OS.h: Added some Win32 macros (e.g., GENERIC_READ) to the
219           UNIX side of the house in order to compile the Proactor on Win32
220           and UNIX.
222 Fri Jun  7 19:36:27 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
224         * Added a new Bourne shell script called ACE-install.sh that will
225           automatically download and install on UNIX machines.  Thanks to
226           Ajit Sagar <asagar@spdmail.spd.dsccc.com> for contributing this.
228 Thu Jun  6 00:37:02 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
230         * Released version 4.0.23 for testing.
232         * ace/Local_Tokens: Updated the *.cpp and *.i files to remove
233           warnings and generally improve the conformance to the ACE coding
234           guidelines.
236         * examples: Moved the Proactor directory into the Reactor
237           directory since the Proactor and Reactor are really two
238           implementations of the same basic pattern.
240         * ace/Memory_Pool.cpp: Fixed an inconsistency caused by not
241           updating __INLINE__ to __ACE_INLINE__.  Thanks to Neil Cohen for
242           finding this.
244         * ace: Added support for the Florida State PTHREADS package.
245           Thanks to Gary Salsbery <gsalsber@simsun.atsc.allied.com> and
246           Eric Beser <beser@simsun.atsc.allied.com> for helping with this.
248         * ace: Added support for the m88k OS.  Thanks to Gary Salsbery
249           <gsalsber@simsun.atsc.allied.com> and Eric Beser
250           <beser@simsun.atsc.allied.com> for helping with this.
252         * ace/OS.h: Added a default value of NULL to the sigwait() OS
253           wrapper method to simplify the usecase in certain cases.
255         * ace/Memory_Pool.cpp (commit_backing_store): Fixed what is
256           hopefully the last typo related to the ACE_DEFAULT_BASE_ADDR
257           macro.  Thanks to Neil B. Cohen <nbc@metsci.com> for reporting
258           this.
260 Thu Jun  6 15:31:40 1996  Tim H. Harrison  (harrison@lambada.cs.wustl.edu)
262         * ace/CORBA_Handler.h: This version of the CORBA_Handler works
263           with Orbix 2.0.  Most of the changes involve the use of C++
264           Exception Handling (the removal of IT_X), and the location of
265           some CORBA system exception classes.
267         * ace/Event_Handler.h: Added handle_*_complete methods for the
268           Proactor.  The Proactor now takes Event_Handlers and calls back
269           the **_complete methods when overlapped I/O operations have
270           completed.
272         * ace/Service_Config.h: Added static accessors for the Proactor to
273           the Service_Config object.  Similar to the Reactor accessors,
274           applications can now use the Service_Config object as the global
275           access point to the Proactor event demultiplexor.
277 Wed Jun  5 22:40:28 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
279         * ace/OS.i (t_free): Added a check to avoid deleting a NULL ptr.
280           This was causing problems for the TLI_Acceptor.  Thanks to Ajit
281           Sagar <asagar@spdmail.spd.dsccc.com> for reporting this.
283         * ace/Makefile: Changed things back so that both static and
284           dynamic libs are built by default...  Thanks to Brad Brown
285           <bbrown@rdxsunhost.aud.alcatel.com> for pointing this out...
287 Sat Jun  1 13:49:51 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
289         * Released version 4.0.22 for testing.
291         * Added Tim Harrison's latest tests for Proactor.
293 Sat Jun  1 13:30:55 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
295         * ace/Memory_Pool.cpp (remap): Fixed a bug in
296           ACE_MMAP_Memory_Pool::remap (). The test for whether or not the
297           addr falls within the range had a '!' (not) missing, that is, it
298           was failing when it should be succeeding and vice versa.
300 Fri May 31 16:31:13 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
302         * Rereleased version 4.0.21 for testing.
304         * Copied over new versions of the Proactor -- there was a small
305           problem with the UNIX version that caused it not to compile...
307 Fri May 31 00:03:41 1996  Tim H. Harrison  (harrison@lambada.cs.wustl.edu)
309         * examples/Proactor/test_proactor.cpp: Added a test program for
310           the Proactor.  Check examples/Proactor/README for more details
311           on this test example.
313         * ace/Proactor.cpp: Added first pass at the Proactor for win32.
314           The Proactor is a Reactor-like abstraction that uses
315           asynchronous I/O, rather than synchronous I/O.  On Windows NT we
316           implement the Proactor using overlapped I/O.  We'll soon be
317           porting the Proactor to Solaris using POSIX 4.x aio_* API for
318           real-time programming.
320           Unfortunately, the Proactor has not yet been integrated with
321           Windows NT WaitForMultipleObjects since it appears that I/O
322           Completion ports are not "waitable" objects on Windows NT.  Does
323           anyone know if this has been fixed in release 4.0?
325 Thu May 30 05:51:23 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
327         * ace/Synch.i: Reordered the definitions of several methods in
328           Synch.i to avoid warnings from G++.  Thanks to Marco Sommerau
329           <sommerau@matisse.informatik.uni-stuttgart.de> for noticing
330           this.
332         * ace/Log_Msg.cpp: There was a problem having to do with the order
333           in which static objects by G++.  In particular, G++ was calling
334           the constructor of the lock_ mutex in Log_Msg.cpp *after* it was
335           being used for the first time.  The right solution is to make
336           lock_ be a pointer and allocate it once in the instance()
337           method.  Thanks to Marco Sommerau
338           <sommerau@matisse.informatik.uni-stuttgart.de> for finding this
339           problem.
341         * ace/TLI_Acceptor.cpp (close): Make sure to only close down the
342           TLI_Request_Queue if queue_ is non-NULL!  Thanks to Ajit Sagar
343           <asagar@spdmail.spd.dsccc.com> for spotting this.
345         * ace: Changed all the enums in the various SysV wrappers from
346           things like CREATE and OPEN to ACE_CREATE and ACE_OPEN to avoid
347           name clashes with other systems.  In addition, also changed
348           NONBLOCK to ACE_NOWAIT to avoid clashes with the existing
349           ACE_NONBLOCK macro!  Thanks to Steve Warwick <sjw@aesthetic.com>
350           for suggesting this.
352         * ChangeLog: Changed all usages of the INLINE macro to ACE_INLINE.
353           This avoids name clashes with other systems.  Thanks to 
354           Chris Eich <Chris_Eich@optilink.optilink.dsccc.com> for
355           suggesting this.
357 Mon May 27 13:03:58 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
359         * ace/Map_Manager.cpp (trybind): The function trybind() doesn't
360           return a value as it should.  A return was missing from the last
361           line of the function.  Thanks to Stuart Powell
362           <stuartp@in.ot.com.au> for finding this problem.
364         * ace/Acceptor.cpp (dump): The debug print referred to
365           "scheduling_strategy_" which doesn't exist in the relevant
366           class.  Replacing it with "concurrency_strategy_" fixes the
367           problem.  Thanks to Stuart Powell <stuartp@in.ot.com.au> for
368           finding this problem.
370         * ace/Mem_Map.i: Make sure to close down the file mapping
371           correctly when we upmap the view!
373         * ace/OS.h: Changed the default shared memory address from 16 M to
374           64 M in order to work around problems with AIX.
376         * ace/Memory_Pool: Moved and renamed the enums in
377           ACE_Shared_Memory_Pool so that they'd be in OS.h.  This makes it
378           easier to remember to change them if they are incorrect.  Thanks
379           to Lionel Mommeja <mommeja@vnet.ibm.com> for suggesting this.
381         * ace/Stream.cpp: Removed #if defined (ACE_HAS_THREADS)
383         * ace/OS.cpp (svc_run): Added a Win32 try/except block to
384           Spawn_Args::svc_run so that we catch all Win32 structured
385           exceptions in order to make sure that we clean up correctly when
386           the thread exits.
388 Sun May 26 11:37:08 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
390         * ace/Local_Name_Space.cpp: Used the new Win32 exception
391           integration in order to ensure that the Name Server will
392           transparently work correctly when the backing store is extended
393           by other processes on the same machine.
395         * ace/Memory_Pool.cpp: Revised the ACE_MMAP_Memory_Pool to export
396           the mechanism for extending the virtual memory mapping.  This
397           can now be called by other programs (e.g., in order to integrate
398           with Win32 Structure Exception Handling).
400         * ace/Memory_Pool.cpp: Changed the use of ACE_OS::lseek() to
401           ACE_OS::filesize() in order to determine the current offset when
402           we're remapping the address space.
404 Wed May 22 13:08:44 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
406         * ace/OS.h (ACE_DEFAULT_TIME_SERVER_STR): Added a new entry for
407           ACE_DEFAULT_TIME_SERVER_STR. 
409         * ace/Malloc_T.cpp (advance): Fixed two small bugs. In
410           ACE_Malloc::try_bind(), if we have a match we need to set
411           pointer to node->pointer_ and not node->name_.
412           Ina ACE_Malloc_Iterator::advance(), the continue in the for loop
413           should be for strcmp != 0 instead of == 0.
415 Sun May 19 12:03:11 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
417         * Released version 4.0.20 for testing.
419         * ace/Service_Record.cpp (remove): Fixed a very mysterious bug
420           that was caused by deleteing an object and then trying to access
421           it's next_ pointer.  This worked on UNIX, but fortunately the
422           MSVC++ compiler does special things to deleted memory and the
423           bug was revealed!  At long last, MSVC++ does something right
424           ;-).
426         * ace/Module.cpp: Revised the code a bit to use the ACE_SET_BITS
427           and ACE_CLR_BITS macros to improve readability.
429         * ace/SV_Semaphore_Complex.cpp (open): Fixed a race condition
430           where we weren't correctly checking for EIDRM.  Thanks to
431           Michael Fortinsky <mike@vocaltec.com> for reporting this.
433 Sat May 18 10:49:04 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
435         * ace: Added a new ace.mak and ace.mdp file for Win32.
437         * ace/Service_Record.cpp: Rewrote some code to work around a bug
438           with MSVC++.  This bug was causing problems since the
439           ACE_Shared_Object methods were getting called, rather than the
440           Test_Task methods used in the examples/ASX/CCM_App.cpp file.
441           Thanks to Tom Leith for pointing out this problem!
443         * ace/OS.h: Added a new #define for ACE_DEFAULT_SVC_CONF to deal
444           with differences between NT and UNIX pathnames.
446         * ace/Time_Value.h: Moved the definition of the INLINE macro from
447           OS.h to Time_Value.h so that it will be in scope for
448           Time_Value.i.  Thanks to Neil Cohen for reporting this.
450         * examples/Reactor/Misc/signal_tester.cpp: There was a typo in
451           signal_test.cpp.  It had mean to use handle_input() rather than
452           handle_output() to exercise the asynchronous signal handling
453           capabilities.  This is fixed now.
455         * apps/Synch-Benchmarks/Benchmark.cpp (thr_id): Added a new #if
456           define (ACE_HAS_DCETHREADS) to make this work on AIX.  Thanks to
457           Greg Wilson <gvw@cs.toronto.edu> for reporting this.
459         * ace/Local_Name_Space: Moved ACE_NS_String and ACE_NS_Internal
460           from the *.cpp file to the *.h file to work around a "feature"
461           of the AIX C++ compiler.  Thanks to Greg Wilson
462           <gvw@cs.toronto.edu> for reporting this.
464         * ace/Reactor.h (ACE_Handler_Repository): Changed the type of
465           cur_size_ from size_t to ssize_t to avoid type mismatches.
467         * ace/Name_Request_Reply.cpp (decode): Fixed some inconsistencies
468           between signed and unsigned loop counters...
470         * ace/OS.h: Changed the typedef of pid_t on Win32 from
471           DWORD to long to be consistent with UNIX.
473 Thu May 16 18:49:14 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
475         * Released version 4.0.19 for testing.
477         * build/SunOS5.4/ace/ACE.cpp (ldfind): Fixed a bug in ldfind()
478           that caused a segfault if we didn't resolve the filename in the
479           LD_SEARCH_PATH.
481         * ace/Reactor and Timer_Queue: Changed the interface of cancel()
482           to include a const void **arg.  If arg is non-NULL then it will
483           be set to point to the ``magic cookie'' argument passed in when
484           the Event_Handler was registered.  This makes it possible to
485           free up the memory and avoid memory leaks.
487         * ace/Service_Record: Removed the #ifdefs that checked if
488           ACE_HAS_THREADS because we ought to be able to build all of this
489           stuff now that we've got the ACE_OS wrappers.
491         * ace/Svc_Conf.y: Removed the #ifdefs that checked if
492           ACE_HAS_THREADS because we ought to be able to build all of this
493           stuff now that we've got the ACE_OS wrappers.
495         * ace/OS.h (ACE_DEFAULT_BACKING_STORE): Made a different
496           ACE_DEFAULT_BACKING_STORE for NT and for UNIX to handle the
497           differences in directory separator characters...
499 Wed May 15 18:45:48 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
501         * examples/ASX/CCM_App/CCM_App.cpp: Fixed up the test application
502           so that it should support dynamic linking on Win32.  Thanks to
503           Tom Leith for reporting this.
505         * ace: Added the ACE_Export macro to class ACE and the various
506           "helper" classes related to ACE_Malloc in order to have this
507           work properly when use with ACE_Malloc outside of the ACE DLL.
509         * ace/Svc_Conf.l: Added support for '\' and ':' in the regular
510           expression for an ACE pathname in order to support Win32
511           filenames (e.g., "C:\foobar\").  Thanks to Tom Leith
512           <trl@icon-stl.net> for reporting this.
514         * ace/Malloc_T.cpp (ACE_Allocator_Adapter): Moved the constructor
515           from the *.i file to the *.cpp file and added a new constructor
516           that takes both a pool_name *and* a lock_name.  This is
517           necessary because the ACE Malloc now has this API, as well.
519         * examples/Threads/test_barrier.cpp (main): Fixed a bug that was
520           caused by the main() thread exiting before all the other worker
521           threads had finished "waiting" on their Barrier.  The fix is to
522           use ACE_Thread_Manager to control the thread exits...
524 Mon May 13 00:03:09 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
526         * examples/Connection/non_blocking/CPP-acceptor.cpp: Modified the
527           implementation of the Svc_Handler::open() method so that it will
528           truly behave as an iterative server (as advertised...).
529           Currently, it behaves as a half-iterative server (i.e., the
530           Oneshot_Acceptor is iterative, but the Svc_Handler is
531           "concurrently"), which is causing problems because we're wiping
532           out the values of Svc_Handler each time through the main event
533           loop.  Thanks to Gerolf Wendland for noticing this problem.
535         * ace/Log_Msg: Added an alternative logging mechanism that makes
536           it possible to integrate variable argument lists from other
537           logging mechanisms into the ACE mechanism.  Thanks to Chris
538           Lahey for proposing this.
540         * ace/Synch.h: Moved ACE_Process_Mutex so that it appears *after*
541           ACE_Mutex (since it depends on ACE_Mutex).  Thanks to Dieter
542           Quehl for finding this.
544         * Released version 4.0.18 for testing.
546         * ace/Name_Space.cpp: Added the ACE_BUILD_DLL macro at the
547           beginning of this file so that it will build as a DLL on NT
548           correctly.
550         * ace/Name_Space.cpp: Added a default constructor for
551           ACE_Name_Binding so that it will compile when used as a template
552           argument for ACE_Unbounded_Set.
554 Sun May 12 14:23:44 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
556         * ace/Map_Manager: Totally reworked the Map Manager so that it can
557           be more flexible with respect to where the allocator comes from.
558           This is necessary for certain parts of ACE (e.g.,
559           Local_Name_Space) that must be very careful about which
560           allocator is used to manage memory.
562         * ace/Synch: Moved ACE_Process_Mutex and ACE_RW_Process_Mutex
563           *outside* of the ACE_HAS_THREADS #ifdef since these are now
564           always defined on all platforms (because the Process_Mutex stuff
565           uses SV Semaphores, which are portable even if we don't have
566           threads!).
568         * ace/Naming_Context.cpp (parse_args): Removed an unnecessary call
569           to strdup().  This was detected by Purify!
571 Sun May 12 14:26:20 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
573         * ace/Local_Name_Space.cpp (shared_bind): Fixed a small bug. In
574           computing type_len in shared_bind(), we needed to add 1 to
575           account for the NUL character.
577         * ace/Local_Name_Space.cpp: (list_types): Fixed some potential
578           memory leaks. In list_types() as well as list_type_entries()
579           calling pattern.char_rep() was allocating memory which was never
580           getting deleted. Similarly, in list_names() and list_values,
581           call to char_rep was also allocating memory that was not getting
582           deleted.
584 Sat May 11 16:19:51 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
586         * ace/Log_Msg.cpp (local_host): added a static member to
587           ACE_Log_Msg that maintains the local host name.  Now, instead of
588           always displaying "<local host>", we can insert the actual local
589           name into the object and then it will be automatically printed
590           when VERBOSE mode is enabled.  Thanks to Chris Lahey for
591           suggesting this.
593         * ace/Local_Name_Space.cpp: Used the new ACE_Name_Binding class to
594           simplify the implementation of all the list_* methods in
595           ACE_Local_Name_Space.
597         * ace/Name_Space.cpp: Made a number of changes to the
598           ACE_Name_Binding class in order to make it work more efficiently
599           and concisely (e.g., reduce the amount of copying and eliminate
600           the need for converting the type field back and forth to/from
601           ACE_WStrings).
603         * examples/Service_Configurator/IPC-tests/server/Handle_L_Dgram.cpp:
604           Fixed a typo where #if !defined (ACE_LACKS_UNIX_DOMAIN_SOCKETS)
605           was *before* the #include of the header file that defines this
606           macro!  Thanks to Nigel for pointing this out, as well.
608         * ace: Added a number of fixes to make ACE compile on SCO UNIX
609           3.2.4 using gcc 2.7.2.  Thanks to Nigel Lowe <nigel@nt.com> for
610           helping with this.
612         * netsvcs/lib/Name_Handler.cpp: operation_ needs to be declared as
613           just LIST_OP and not ACE_Name_Handler::LIST_OP. For some strange
614           reason NT complains otherwise.  Thanks to Prashant for finding
615           this.
617 Fri May 10 01:09:17 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
619         * ace: Added new versions of ace.mak and ace.mdp to fix a couple
620           of minor typos.
622         * ace/Malloc_T.cpp (ACE_Malloc): Added a new constructor that
623           takes both the pool_name and the lock_name explicitly.  This is
624           more flexible.  Thanks to Ramesh Nagabushnam <rcn@nynexst.com>
625           for suggesting this.
627         * ace/Malloc_T: Modified the constructor of ACE_Malloc so that by
628           default the name of the memory pool (which is also used as the
629           name of the lock...) is ACE_DEFAULT_MUTEX.  
631         * Released version 4.0.17 for testing.
633         * ace/Connector.cpp (create_AST): Must reset errno = EWOULDBLOCK
634           to avoid making caller's think that something else has gone
635           awry...  Thanks to Steve Warwick <sjw@aesthetic.com> for chasing
636           this down!
638         * ace/ACE.cpp (handle_timed_complete): If you issue a non-blocking
639           connect on a socket, you will have back a failure with errno =
640           EINPROGRESS.  Then, if for some reason, the connection could not
641           be established, the select (which you have to issue to know
642           about the completion of connection) will return you the fd set
643           both in the read mask and in the write mask (infact select
644           returns 2 in this case).  The behaviour above affects the method
645           ACE::handle_time_complete, so I changed the last part of the
646           above method, this way:
648           if (n <= 0)
649           {
650           ...
651           ...
652           }
653           else if (rd_handles.is_set(h))
654           {
655             char dummy;
656             // The following recv() won't block provided that the
657             // ACE_NONBLOCK flag has not been turned off .
659             if (ACE::recv (h, &dummy, 1, MSG_PEEK) <= 0)
660               return ACE_INVALID_HANDLE;
661           }
663           // 1. The HANDLE is ready for writing or 2. recv() returned that
664           // there are data to be read thus the connection was successfully
665           // established.
666           return h;   
668           That is, I reversed the sense of the tests so that the
669           rd_handles() is checked first for failure along with the recv().
670           Thanks to Antonio Tortorici <antonio@rh0011.roma.tlsoft.it> for
671           suggesting this.
673         * examples/Threads/test_thread_manager.cpp (main): Changed argv[1]
674           to argv[2].  Thanks to Andres Kruse <kruse@cern.ch> for finding
675           this problem.
677         * examples/Connection/non-blocking: Fixed some nasty bugs that
678           caused the non-blocking connector and acceptor test programs to
679           crash and burn.  Thanks to Steve Warwick and Gerolf Wendland for
680           finding this problem.
682         * ace/SV_Semaphore_Simple.cpp (open): Check for
683           ACE_INVALID_SEM_KEY and return -1 in this case.
685         * ace/Synch.h: Removed the default value of 0 for the name of the
686           ACE_Process_Mutex and the ACE_RW_Process_Mutex and replaced it
687           with a new macro called ACE_DEFAULT_MUTEX.  Using 0 didn't make
688           any sense on either NT or UNIX because process-wide Mutexes
689           should be named!
691         * ace/SV_Semaphore_Simple.cpp (name_2_key): Added a check for name
692           == 0 and bail out of that's the case rather than crash!
694         * ace/Reactor.cpp (wait_for_multiple_events): In the Reactor's
695           wait_for_multiple_events method, the do {} while () around the
696           select/poll system call is trying to wait until some "good"
697           event occurs, with handle_error() taking care of unexpected
698           problems.  In the case of a bad file descriptor, however,
699           handle_error() returns 0.  This was exiting the loop because the
700           loop exit condition was:
702           do { /* ... */ } while (nfound == -1 && this->handle_error () > 0);
704           which eventually causes ACE_Service_Config::run_event_loop() to
705           exit.  Since the offending file descriptor is handled by
706           handle_error(), the loop should continue.  Therefore, I've
707           changed the while to read:
709           while (nfound == -1 && this->handle_error () >= 0);
711           Thanks to Eric C. Newton <ecn@clark.net> for providing this fix.
713         * ace/INET_Addr.cpp (string_to_addr): Changed the order of the
714           parameters so that the form is now "ip-address:port".  This
715           should (finally) be consistent for both string_to_addr() and
716           addr_to_string()...
718         * ace/Log_Msg: Changed the char * parameter of the log() method to
719           const char *.  Thanks to Chris for suggesting this!
721         * ace/Synch_T.cpp: Moved the #if defined (ACE_HAS_THREADS) down to
722           the right part of the file...  Thanks to Alex Karev
723           <akg@na47sun05.cern.ch> for finding this.
725         * ace/Malloc.h: Added a very important #else...  Thanks to Alex
726           Karev <akg@na47sun05.cern.ch> for finding this.
728         * ace/Signal.i (ACE_Sig_Guard): Changed the sense of the #ifdef
729           tests in the ACE_Sig_Guard constructor and destructor from #if
730           !defined (ACE_MT_SAFE) to #if 0 // !defined (ACE_MT_SAFE) in
731           order to get the right semantics for signals (which should be
732           blocked "process wide").
734         * ace/Synch_T.h: put the frigging copy constructor in the public
735           section of ACE_Atomic_Op because it was causing trouble for
736           NT...
738 Mon May  6 00:11:37 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
740         * Released version 4.0.16 for testing.
742         * ace/Log_Msg.cpp: Was defining ACE_Recursive_Thread_Mutex in the
743           wrong place (i.e., outside of the #if defined (ACE_MT_SAFE).
744           This was screwing up HP/UX.  Thanks to Neil Cohen for pointing
745           this out!
747         * Incorported new versions of ace.mdp and ace.mak for Win32.
749 Sun May  5 16:18:43 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
751         * netsvcs/lib/Server_Logging_Handler.cpp (handle_input): Fixed a
752           bug whereby handle_input() was returning the number of bytes
753           read by handle_logging_record() rather than 0 or -1.  This was
754           causing problems for the logger since it was hanging in read()!
756         * ace/Synch_T.cpp: Fixed some minor problems with the use of const
757           in ACE_Atomic_Op that was causing warnings.
759 Sat May  4 16:31:46 1996  Douglas C. Schmidt  (schmidt@mambo.cs.wustl.edu)
761         * ace/SOCK_Dgram_Bcast: Reimplemented most of the ACE socket
762           broadcast mechanism to (1) clean up the code and have it use
763           other parts of ACE and (2) make it work for Windows NT.  Thanks
764           to Steve Weismuller <spweismu@rsoc.rockwell.com> for the basic
765           ideas here.
767         * ace/INET_Addr: Added a new method to set the port number without
768           changing the host address.  This is useful in the broadcast
769           class.
771         * ace/Log_Record.cpp (print): Changed the hack of replacing the
772           newline with a call to flush() instead.  This seems like a
773           better fix.  Thanks to Alex for suggesting it.
775         * ace/Log_Msg.cpp (log): Moved the order of the print operations
776           so that the ostream one goes last.  This avoids a nasty problem
777           due to the fact that it replaces the newline (if any).  Thanks
778           to Alex for pointing this out too!
780         * ace/Log_Msg.cpp (log): Don't auto-increment bp at the end of
781           the log() method, instead just terminate it:
783           *bp = '\0';                   // Terminate bp. 
785           This makes the length computation correct...  Thanks to the
786           ever-vigilent Alexandre Karev <akg@na47sun05.cern.ch> for
787           reporting this.
789         * examples/Shared_Malloc/test_malloc.cpp: Fixed a bug where a void
790           * that was really an int was being cast incorrectly.  Thanks to
791           Raj for pointing this out.
793 Sat May  4 12:51:25 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
795         * ace/Reactor.cpp (find): Modified the ACE_Handler_Repository so
796           that it doesn't crash when it isn't initialized properly.
797           Thanks to Darrin for pointing this out.
799         * ace/Synch_T.cpp (wait): Changed the call wait(ACE_Time_Value *)
800           to wait(const ACE_Time_Value *) since wait() will not change the
801           time value object.
803         * ace/Thread_Manager.cpp (wait): Changed the call
804           wait(ACE_Time_Value *) to wait(const ACE_Time_Value *) since
805           wait() will not change the time value object.  Thanks to Chris
806           Lahey for suggesting this.
808         * ace/Synch.h: Added a (const char * = 0) argument to
809           ACE_Null_Mutex so that it would work correctly with
810           ACE_Thread_Mutex and ACE_Process_Mutex...
812 Fri May  3 17:26:07 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
814         * netsvcs/lib/Name_Handler.cpp (lists_entries): Used '_' with
815           name/value/type in ACE_Name_Binding to be consistent with the
816           notation. 
818 Fri May  3 02:24:19 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
820         * ace/Synch: Updated ACE_Process_Mutex to use SV_Semaphore_Complex
821           as the UNIX implementation.  This seems like the only portable
822           and robust way to get the same semantics on UNIX and on NT!
824         * ace/Malloc_T: It turned out there was a subtle bug with
825           ACE_Malloc on NT when used with the ACE_Process_Mutex
826           concurrency policy.  On NT, we were storing the *HANDLE* of a
827           mutex in shared memory.  Naturally, this didn't make any sense
828           since each HANDLE is relative to only one process!!! (duh ;-)).
829           This worked fine on UNIX because mutex_t's created with
830           USYNC_PROC mode can be stored in shared memory and accessed
831           directly...
833           We fixed this by changing ACE_Malloc so that the 
834           LOCK is allocated in non-shared memory.  We then
835           fixed ACE_Process_Mutex so that on UNIX it is
836           implemented with SV_Semaphore_Complex.  This is
837           (a) portable and (b) it gives the right semantics.
838            
839           As a result, we were able to totally eliminate the storage of
840           the lock in shared memory.  Therefore, it doesn't matter of the
841           host crashes anymore!  In addition, we were able to totally
842           remove the ugly "init_finished" lock that was previously stored
843           in shared memory by ACE_MMAP_Memory_Pool.  This is *much*
844           cleaner!!
845            
846           Thanks to Karlheinz et al for pointing this problem out in the
847           first place!
849         * ace: Removed a stray file called Svc_Conf_tokens.h.  This was
850           causing problems on Win32 due to name clashes...  Thanks to Adam
851           Miller <adam@royalblueny.com> for pointing this out.
853         * ace/SString.cpp (strstr): there were some for (size_t j; ...) {}
854           if (j == x) constructs in the code that have as of recently
855           become non-standard.  Thanks to Darrin <darrin@jeeves.net>
856           for reporting this.
858 Tue Apr 30 00:18:46 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
860         * ace/Thread.i (self): Commented out the ACE_Trace call in the
861           ACE_Thread::self() methods to avoid infinite recursion problems
862           on Win32.
864         * ace/Token.cpp (ACE_Token): Commented out the ACE_Trace call in
865           the constructor of ACE_Token to avoid infinite recursion
866           problems on Win32.
868         * ace/Log_Msg.cpp (instance): Moved the definition of the static
869           variable keylock_ into the static instance() method in order to
870           avoid "order of initialization" problems on Win32.  Thanks
871           to Tim for figuring this out!
873 Sun Apr 28 17:07:58 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
875         * netsvcs: Rearranged and renamed the subdirectories so that they
876           are now called ./netsvcs/{lib,clients,servers}.  In addition,
877           moved the Logger, Naming, and Tokens examples from ./examples
878           into the ./netsvcs/clients directory in order to make the
879           relationships more clear.
881 Sat Apr 27 14:23:43 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
883         * ace/Name_Space.cpp (operator ==): Created a new file
884           Name_Space.cpp and moved the definitions for
885           ACE_Name_Binding::operator== and ~ACE_Name_Space in it. Also
886           modified code to use '_' at the end of name/value/type in
887           ACE_Name_Binding.
889 Sat Apr 27 16:00:03 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
891         * ace/INET_Addr.i (get_host_addr): There was an error where
892           sprintf(s,"%d:%s" ...) should have been %s:%d.  Thanks to
893           Raj <raj@itd.ssb.com> for pointing this out.
895 Mon Apr 22 01:24:45 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
897         * ace/Dump_T.h: #included "ace/Dump.h" so that this file will
898           compile on HP/UX.  Thanks to Neil Cohen for reporting this
899           problem.
901         * Released version 4.0.15 for testing.
903         * ace/Synch_T: Added the appropriate "const" qualifiers to certain
904           operators in ACE_Atomic_Op.
906 Sun Apr 21 12:54:18 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
908         * ace: Fixed a problem that Dieter was having with the Name Server
909           when toggling between Naming_Contexts.  Basically, what I've
910           done is
912           1. Moved the unmap() call into the ACE_Mem_Map::close() method
913              (this ensures that the region is correctly unmapped when the
914              Mem_Map is deleted).
916           2. I've removed the call to this->allocator_->remove () within
917              ~ACE_Local_Name_Space.  This ensures that we don't remove the
918              backing store file.
920         * ace/Mem_Map.cpp: Modified the ACE_Mem_Map::remove method to call
921           ACE_Mem_Map::close() in order to share code.
923         * ace/Mem_Map.cpp: Modified the ACE_Mem_Map::close() method so
924           that it unmaps the mapped region before closing down the backing
925           store.  This prevents "dangling mapping."
927         * ace/Local_Name_Space.cpp (ACE_Local_Name_Space): Initialized all
928           the pointers to NULL.
930         * ace/Synch_T.cpp (ACE_Atomic_Op): Enhanced the Atomic_Op
931           implementation by adding an assignment operator and disallowing
932           the copy constructor (forcing objects of ACE_Atomic_Op to be
933           passed by reference).
935         * examples/Naming/Client/Client_Test: Reorganized the code for
936           Client_Test so that it will run correctly as a Win32 netsvc
937           (e.g., added the ACE_Svc_Export macro).
939 Sun Apr 21 20:23:40 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
941         * ace/Naming_Context.cpp (close): Added a new method to
942           Naming_Context called close() that deletes the instance of
943           name_space_.
945         * ace/Local_Name_Space.cpp (ACE_Local_Name_Space): Added stuff to
946           the destructor of Local_Name_Space so that it calls remove on
947           the allocator_ to ensure we unmap the file. Also, we delete the
948           allocator_.
949          
950         * examples/Naming/Client/Client_Test.cpp (set_proc_local): Changed
951           set_proc_local (), set_node_local() and set_host() so that
952           before we change name space, we do a close() on
953           Naming_Context. The close ensures that we unmap the file as well
954           as delete the instance of the name space.
955         
956 Sat Apr 20 12:39:20 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
958         * ace: Removed the Name_Options.* files and merged the
959           ACE_Name_Options class into Naming_Context.*.  This simplifies
960           some order of include problems...
962         * ace/Naming_Context.cpp (init): Switched the code so that rather
963           than always opening with ACE_Naming_Context::PROC_LOCAL, we use
964           ACE_Name_Options::context(), which can be overridden by using
965           the new -c command-line option (e.g., -c NODE_LOCAL).  Thanks to
966           Dieter for suggesting this.
968         * ace/OS.i: Modified the Win32 implementation of all the
969           ACE_OS::flock_*lock() methods so that they'd have the same
970           behavior as the UNIX ones with respect to a length of 0 meaning
971           "lock the entire length of the file."  This works, of course, by
972           having each method check if len == 0, and if so, calling
973           GetFileSize() to set the size of the file.
975         * ace/Synch.h: Changed the default len value for all the
976           File_Lock::*acquire* methods to 1 rather than 0 to work around a
977           problem with Win32.  Thanks to Detlef for reporting this.
979         * ace/ACE.cpp (ldfind): Added a strdup() of the LD_SEARCH_PATH
980           returned by getenv() so that we don't overwrite the environment
981           variable by using strtok().  Thanks very much to Prashant for
982           figuring this out!
984 Thu Apr 18 22:13:43 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
986         * examples/Naming/Client/Client_Test.cpp (list_value_entries):
987           Added check in list_name_entries and list_value_entries to see
988           if type actually exists before trying to print it out.
990 Wed Apr 17 16:40:42 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
992         * Released version 4.0.14 for testing.
994         * Added Tim Harrison's new instructions for building and using ACE
995           as a DLL and SLL on Win32.
997         * ace/Svc_Conf.h: Due to the new changes to the yacc code, I had
998           to move the definition of YYSTYPE into the Svc_Conf.h file
999           rather than have it in the Svc_Conf.y file.  This solves a
1000           variety of multiple-inclusion problems...
1002         * ace: Modified all the yacc token symbols so that they will be
1003           prefixed with ACE_.  This avoids namespace pollution problems.
1005         * Added the ACE_STATIC_SVC* macro support to a number of files so
1006           that the static versions of all the ACE services will be
1007           registered with the ACE Service Repository correctly.  Thanks to
1008           Jesper for pointing this out!
1010         * ace/OS.h: the first occurence of 
1012           typedef thread_t tid_t;
1014           in the OS.h file should read
1016           typedef pthread_t tid_t;
1018           Thanks to Jan Rychter <jwr@icm.edu.pl> for reporting this.
1020         * ace/Read_Buffer.cpp: Fixed rec_read() so that it will fail
1021           correctly when new fails!
1023 Wed Apr 17 19:05:42 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
1025         * netsvcs/lib/Name_Handler.cpp (type_request): Here is a brief
1026           description of the changes made to ACE_Name_Handler to simplify
1027           the dispatch method and make it more elegant:
1029           1) I created a table called op_table_. It contains pointers to
1030              member functions of ACE_Name_Handler. This table can be
1031              indexed using the msg_type. However, I went one step further
1032              to have all the list methods be grouped under two
1033              methods. That is, requests for list_names, list_values, and
1034              list_types are handled by one method called lists() and
1035              similarly, requests for list_name_entries,
1036              list_value_entries, and list_type_entries are handled by
1037              another method called lists_entries(). A MASK is used to have
1038              the op_table_ index to the same method for these requests.
1040           2) I also created another table called list_table_. This is
1041              primarily used by lists() to keep track of a couple of things:
1042                    + pointers to member functions of Name_Handler that
1043                      handle the actual request.
1044                    + pointers to member functions of Name_Handler that act 
1045                      as factories to create the appropriate request to
1046                      send back. 
1047                    + description of the message type.
1048                    
1049              A different MASK is used to index into the list_table_ to
1050              invoke the appropriate method or get the appropriate description.
1052          3) Within the method lists_entries(), I once again make use of
1053             the pointers to member functions technique. This time,
1054             however, I use pointers to member functions of Naming_Context
1055             which I assign in the switch statement.
1057 Tue Apr 16 13:03:49 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
1059         * Released version 4.0.13 for testing.
1061         * ace/INET_Addr.i: moved the get_port_number routine up to the top
1062           of the file so it gets defined before it is used.  Linux did not
1063           like it where it was...  Thanks to Neil Cohen for reporting
1064           this.
1066         * ace: Split the Dump.* files into Dump_T.* files.  This is
1067           necessary to support the template policies of various C++
1068           compilers.
1070         * ace/Malloc_T.cpp (dump): Fixed an erroneous use of -> since
1071           guard_ is a non-pointer...  Thanks to Neil Cohen for reporting
1072           this.
1074         * ace/Log_Record.cpp (print): Finally figured out how to do
1075           extensible ostream logging so that it will seamlessly work with
1076           ACE_Log_Msg.  This required one change to ACE_Log_Record,
1077           however.  In Log_Record.cpp:
1079           In ACE_Log_Record::print(char *, int, ostream, size_t len), added 
1081           char *t = this->msg_data_[len - 1];
1083           if (t == '\n')
1084             *t = '\0';
1086           s << this->msg_data_ << endl;
1088           This is required because the virtual function overflow() in
1089           streambuf does not get called until endl is called to flush the
1090           buffer.  Note that (at least on AIX), '\n' is treated separately
1091           from endl and will not cause the overflow() function to be
1092           called.  Thanks to Chris Lahey for this idea.
1094         * ace/OS: Added a new wrapper for strrchr().
1096         * ace/Token_Collection.cpp (renew): Added a cast of
1097           (const char *) to token_name so that the conversion operator
1098           will get called correctly.  Thanks to Gonzalo Diethelm
1099           <gonzo@ing.puc.cl> for reporting this.
1101 Tue Apr 16 13:29:32 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
1103         * ace/Name_Request_Reply.cpp (decode): Fixed a small bug in encode()
1104           and decode() of ACE_Name_Request. When doing ntohs and htons, we
1105           only ought to do it for the name and value part of data. type
1106           needed to be left alone since it is not a short.
1108 Mon Apr 15 02:31:00 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
1110         * include/makeinclude/platform_hpux_orbix.GNU: Added
1111           David.L.Sames.1@gsfc.nasa.gov (David Sames) config*.h file and
1112           platform_*.GNU file for HP/UX 9.x using Orbix.
1114         * ace/OS.i: Fixed all uses of pthread_cleanup_{pop,push} so that
1115           they will work correctly if (1) the OS implements the as macros
1116           and (2) if these macros must obey strict nesting rules...
1117           Thanks to Reginald S. Perry <perry@zso.dec.com> for pointing out
1118           how to do this effectively.
1120         * ace/Thread_Manager.h: Fixed a typo where the typedef 
1121         
1122           typedef (ACE_Thread_Manager::*THR_FUNC)(int, int);
1124           was lacking a return value.  Thanks to Reginald S. Perry
1125           <perry@zso.dec.com> for reporting this.
1127         * netsvcs/bin/main.cpp (main): Fixed the main program so that it
1128           passes the options correctly for the statically linked service
1129           invocations.  Thanks to Jesper for reporting this.
1131         * examples/Naming/Client/Client_Test: Updated the client test
1132           program so that it will work on Window NT, where it's not valid
1133           to select() on non-socket HANDLEs (ugh).  Thanks to Jesper for
1134           pointing this out...
1136         * Released version 4.0.11 for testing.
1138 Mon Apr 15 00:20:02 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
1140         * ace/Local_Name_Space.cpp (strstr): Fixed ACE_NS_String::strstr
1141           to function properly. It was assuming that length of the pattern
1142           as well as the string was in units of ACE_USHORT16 when in
1143           reality the length is number of bytes.
1145         * ace/Local_Name_Space.cpp (value_): Modified ACE_NS_Internal so
1146           that instead of taking an ACE_NS_String for type, it now take a
1147           char*. It therefore keeps type around as a char*. This should
1148           help solve some problems we were encountering with byte ordering
1149           when sending data between NT machines and Sun.
1151         * netsvcs/lib/Name_Handler.cpp: Cleaned up lists_entries by making
1152           use of pointer to member functions. A single call to the
1153           appropriate list method takes care of everything.
1155 Sun Apr 14 16:21:32 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
1157         * ace/INET_Addr.i (addr_to_string): Swapped the order that the
1158           hostname and port number are printed to make this consistent
1159           with the way that ACE_INET_Addr::string_to_addr works.  Thanks
1160           to Ashish Singhai <singhai@delirius.cs.uiuc.edu> for pointing
1161           this out.
1163         * ace/TLI_Acceptor: Changed the methods to take an ACE_Addr rather
1164           than an ACE_INET_Addr.  This allows other address families (such
1165           as DECnet) to be used with the TLI wrappers.  Thanks to Ajit
1166           Sagar <asagar@spdmail.spd.dsccc.com> for suggesting this.
1168         * ace/Local_Name_Space.cpp (list_types): Removed the use of
1169           regular expression matching for the name and value types of the
1170           name server and replaced these with substring matching instead.
1171           This is necessary since we're working with wide characters here,
1172           and it doesn't make any sense to perform regular expressions on
1173           these puppies...
1175         * ace/Local_Name_Space.cpp: Added a new strstr() method on all the
1176           ACE_NS_String class so that we can compare substrings for wide
1177           character types.
1179         * ace/SString: Added a new strstr() method on all the
1180           ACE_[WSC]String classes so that we can compare substrings, 
1181           even for wide character types!
1183         * apps/gperf: Incorporated the GNU gperf program from the FSF.
1184           We're going to make some improvements to this for a subsequent
1185           paper.
1187 Sun Apr 14 15:30:05 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
1189         * ace/Name_Request_Reply.h: Changed the enum values for the
1190           Constants such as BIND, REBIND, etc. The new values allow us to
1191           do bitwise operations using MASK to be able to dispatch the same
1192           method for all the list operations. For use case of this, please
1193           see Name_Handler::dispatch().
1195         * netsvcs/lib/Name_Handler.cpp (dispatch): Completely changed
1196           dispatch() so that now it uses a table of pointer to member
1197           functions to call the appropriate method when a request
1198           arrives. In addition, requests for LIST_NAMES, LIST_VALUES, and
1199           LIST_ENTRIES are now handled by one method called lists() in which
1200           I factored out a lot of common code. Similarly, requests for
1201           LIST_NAME_ENTRIES, LIST_VALUE_ENTRIES, and LIST_TYPE_ENTRIES are
1202           handled by lists_entries(). This has really cleaned up the code.
1204 Sat Apr 13 15:26:51 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
1206         * ace/Name_Request_Reply.cpp: Made changes so that all
1207           byte-ordering computations take place in encode and decode
1208           methods of ACE_Name_Request_Reply and ACE_Name_Reply
1209           only. Previously some of these computations were taking place in
1210           Get/Set methods such as name_len() which was highly error prone.
1211           (init): Added new methods called init() to both ACE_Name_Request
1212           and ACE_Name_Reply that initialize length to size of transfer_. This
1213           is needed since the length gets set only once in the constructor
1214           and after that each call to encode() switches the byte ordering
1215           causing problems.
1217 Sat Apr 13 11:44:16 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
1219         * Released version 4.0.10 for testing.
1221         * ace: Removed the ACE_HAS_THREAD_T macro from various places.
1222           This was unnecessary given the new scheme for dealing with
1223           threading.
1225         * ace/config-linux-pthread.h: Fixed a typo that was preventing
1226           compilation from working.  Thanks to Jan Rychter
1227           <jwr@icm.edu.pl> for finding this.
1229 Fri Apr 12 13:17:47 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
1231         * apps/Gateway/Gateway: The gateway application appears to
1232           be working again!
1234         * ace/OS.cpp (thr_create): Based on conversations with Chris
1235           Lahey, modified the pthreads ACE_OS::thr_create implementation
1236           so that it doesn't try to assign the hthread_t thr_handle since
1237           this is meaningless in pthreads...
1239         * apps/Gateway/Gateway/Gateway.cpp: Fixed a typo that was causing
1240           the system to go into an infinite loop when the config file was
1241           empty!
1243         * apps/Gateway/Gateway/Gateway.cpp: I was forgetting to set the
1244           line_number to 0 before calling read_entry()...
1246         * ace/Parse_Node.cpp: Fixed a dumb error that arose because I
1247           forgot that you can't call dlerror() twice and get the same
1248           result (it returns NULL the second time).  As usual, RTFM.
1250         * ace: Removed ACE_HAS_TLI from all the SunOS 4.x config*.h files
1251           and platform_*.GNU files.  There are just too many bugs with TLI
1252           on SunOS 4.x to support it by default...
1254         * examples: Made some minor fixes to make the examples all compile
1255           with GCC.
1257         * apps/Gateway/Gateway/Gateway: Reimplemented the Gateway
1258           application as to be an ACE network service.  This should make
1259           life much easier on platforms with broken C++ templates...
1261         * apps/Gateway/Gateway: Revised the Config_Parser.* files so that
1262           templates would be split from the non-templates.  This avoids
1263           bugs with some C++ compilers...
1265         * ChangeLog: added the ACE_TEMPLATES_REQUIRE_SPECIALIZATION flag
1266           to the config-linux-pthreads.h file.  Thanks to
1267           Jean-Francois.Ripouteau@netsurf.org for reporting this, and also
1268           for archiving the ACE mailing list.
1270 Thu Apr 11 01:37:25 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
1272         * Released version 4.0.9 for testing.
1274         * ace: regenerated all the manual pages and html pages.
1276         * Built ACE successfully on SGI IRIX 5.3 using GNU G++ 2.7.2.
1277         
1278         * ace/Thread_Manager: renamed the descriptor() accessor methods to
1279           hthread_descriptor() and thread_descriptor() to avoid
1280           ambiguities due to the fact that hthread_t and thread_t can now
1281           be the same type.
1283         * ace/Thread_Manager: revised the hthread_t so that it is always
1284           large enough to hold valid thread ids.
1286         * ace: Moved the config-osf1.h file to be named config-osf1-3.2.h
1287           in anticipation of OSF/1 4.0...
1289         * ace: Changed all occurrences of wchar_t to ACE_USHORT16, which
1290           is a more portable way of representing wchar_t's so that we can
1291           pass them across the network...  Unfortunately, wchar_t tends to
1292           be different sizes on different machines, so we can't use the
1293           binary form!!!
1295         * ace: Added many, many small changes to get ACE to compile on
1296           OSF/1 3.2D using DEC C++ 5.3.  Thanks to Tom Marrs
1297           <0002104588@mcimail.com> for slogging through all of this stuff!
1299         * ace/Thread_Manager.h: Fixed a stupid oversight where I forgot to
1300           add a -1 to the trailing argument of spawn*.  Thanks to Neil
1301           Cohen for spotting this.
1303         * ace: Added a new ACE config file for AIX 3.2.5 courtesy of Bob
1304           Olson <olson@mcs.anl.gov>.  In addition, I changed the name of the
1305           config-aix.h file to be config-aix-4.1.x.h and called the new
1306           file config-aix-3.2.5.h.
1308         * apps/Synch-Benchmarks/Benchmark.cpp: Added template
1309           specializations for ACE_TSS and ACE_Atomic_Op.  Thanks to Matt
1310           Stevens for pointing out the need for this.
1312         * ace/CORBA_Handler: Added a number of fixes to get the ACE
1313           CORBA_Handler to compile on Win32 with Orbix 2.0.  Thanks to
1314           Rich Ryan <rryan@mseng.kla.com> for these fixes.
1316         * ace/OS.cpp (thr_create): Fixed a small bug in the pthreads
1317           thr_create() code by dereferencing p_thr before casting it
1318           to hthread_t and assigning it to *thr_handle.
1320         * ace/OS.i: Backed out the previous changes of pthread_cleanup*.
1321           It turns out that on SunOS 5.5 these macros force a certain
1322           style of programming this is hard to integrate with the existing
1323           implementations of other ACE wrapper methods.  Fortunately, none
1324           of this affects existing ACE code since we just use the default
1325           solaris threads API in this case...
1327         * ace/OS.i: Modified the order of #ifdefs in various ACE_OS::thr_*
1328           methods to take advantage of the pthreads features on Solaris
1329           2.5.
1331         * ace: Removed the last few typos that prevented ACE from building
1332           on SunOS 4.x with G++...
1334         * ace/Thread_Manager: Changed spawn() and spawn_n() so that
1335           they optionally take a group parameter and automatically add 
1336           this to an existing thread group.  That way we don't need to
1337           spawn the thread(s) and then reassign them after the fact.  
1338           The new API automatically assigns the thread(s) to the group 
1339           you specify.  Thanks to Chris Lahey for this idea.
1341         * ace: Fully integrated POSIX pthreads into the ACE build for
1342           Solaris 2.5.
1344         * netsvcs/lib/Server_Logging_Handler.cpp: Rearranged the Server
1345           Logging files so that things will compile and link correctly
1346           using stock GNU G++.
1348         * ace/Log_Msg.cpp (ACE_Log_Msg): Forgot to initialize the ostream
1349           * to 0.  This was causing problems for Win32...
1351         * ace: *Finally* got the static and dynamic ACE libraries to
1352           compile on SunOS 4.x using stock G++! 
1354         * ace/Synch_T.h: Added a new macro called ACE_SYNCH that will
1355           be ACE_NULL_SYNCH if !ACE_HAS_THREADS and ACE_MT_SYNCH if
1356           ACE_HAS_THREADS.
1358         * ace/Service_Record.cpp: Changed this to use ACE_SYNCH.  This
1359           will fix template problems with G++ on SunOS 4.x.
1361         * build/SunOS5.5/ace/OS.i (sema_wait): Changed all uses of
1362           ::pthread_cleanup_{push,pop} to pthread_cleanup_{push,pop} since
1363           these are implemented as macros on Solaris....
1365 Thu Apr 11 19:43:33 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
1367         * examples/Naming/Dump_Restore/Dump_Restore.cpp (init): Modified
1368           Dump_Restore in order to work correctly without having
1369           Name_Options around as a Singleton.
1371         * examples/Naming/Client/Client_Test.cpp (set_host): Modified
1372           Client_Test in order to work correctly without having
1373           Name_Options around as a Singleton. It simply uses the accessor
1374           provided by Naming_Context to get to Name_Options.
1376         * ace/Name_Options.cpp: Changed Name_Options so that it is no
1377           longer a Singleton. As a result, now there is an instance of
1378           Name_Options per Naming_Context. Note that for an application to
1379           change Name_Options, it can use the accessor function provided
1380           in Naming_Context. As a consequence of all these changes, we can
1381           now have multiple Naming_Contexts per application.      
1383 Wed Apr 10 20:19:50 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
1385         * ace/OS.h: Incorporated a mapping for Solaris 2.5 pthreads so
1386           that it fits in nicely with the earlier ACE pthreads support.
1387           From now on, the pthreads API will be the default threading
1388           scheme for ACE on Solaris 2.5...
1390         * ace: Added the file name to every *.cpp and *.i file in ACE.
1391           This makes it easier to figure out what's what when looking at
1392           the source code.  Thanks to Chris Lahey for suggesting this.
1394         * ace/CORBA_Handler.cpp (ACE_CORBA_Handler): Added bodies for
1395           the copy constructor and assignment operator of ACE_CORBA_Handler
1396           (which are private) since some compilers generate link errors
1397           for these!  Thanks to Rich Ryan <rryan@mseng.kla.com> for
1398           pointing this out.
1399           
1400         * ace/Synch_T.cpp (ts_get): at line 270 (within
1401           ACE_TSS<TYPE>::ts_get (void) const) there was a keycreate() call
1402           that did not have an instance pointer pass in with it.  The
1403           symptom has been that if the last active task has been finished
1404           all active tasks being created afterwards won't get the close()
1405           hook invoked.  I've fixed this in order to solve a mysterious
1406           bug with ACE_TSS.  Thanks to the ever-vigilant Detlef for
1407           reporting this bug and fix.
1409 Wed Apr 10 01:56:52 1996  Douglas C. Schmidt  (schmidt@mambo.cs.wustl.edu)
1411         * ace: Added the ACE_TEMPLATES_REQUIRE_SPECIALIZATION to
1412           config-sunos5.5-g++.h file.  This should allow ACE to build
1413           correctly.  Thanks to Adam Miller <adam@royalblueny.com> for
1414           pointing this out.
1416         * ace: Installed SunOS 5.5, so now we can finally test pthreads!
1418         * ace/OS: Modified the implementation of mutex_t for Win32 so that
1419           it automatically selects the CRITICAL_SECTION or the HANDLE form
1420           of Mutex depending on whether the type argument is USYNC_THREAD
1421           or USYNC_PROCESS, respectively.  This now means that all the
1422           existing ACE code that used ACE_Condition<ACE_Mutex> will
1423           continue to work correctly on Win32 and UNIX!
1425 Tue Apr  9 23:04:30 1996  Douglas C. Schmidt  (schmidt@mambo.cs.wustl.edu)
1427         * ace/Synch: Somehow, the definitions for ACE_Thread_Semaphore and
1428           ACE_Process_Semaphore were MIA.  I've added the implementations.
1429           Thanks to Bruce Worden <bruce@betsy.gps.caltech.edu> for
1430           noticing this...
1432 Tue Apr  9 02:16:02 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
1434         * ace/Service_Config.cpp: reordered the #includes in this file so
1435           that it works correctly on Win32.  Thanks to Rich Ryan
1436           <rryan@mseng.kla.com> for help with this.
1438         * ace/Auto_Ptr.cpp (remove): added the implementations of the
1439           auto_ptr::remove() and auto_array_ptr::remove() static methods.
1440           Thanks to Chris Lahey for noticing their absence...
1442         * ace/Auto_Ptr: Added the #pragma implementation ("Auto_Ptr.cpp")
1443           statement if defined ACE_TEMPLATES_REQUIRE_PRAGMA to work on
1444           AIX.  Thanks to Chris Lahey for this.
1446         * ace/Makefile: Moved Auto_Ptr from FILES to TEMPLATE_FILES to
1447           work on AIX.  Thanks to Chris Lahey for pointing this out.
1449         * Modified a bunch of the apps and example Makefiles so that
1450           things will build better using G++.
1452         * ace/Name_Options.cpp (parse_args): Made the "database" name the
1453           same as the process name by default...
1455         * ace/Reactor.h: Changed the type of current_ in
1456           ACE_Handler_Repository_Iterator from size_t to ssize_t so that
1457           this can handle negative numbers.  Thanks to Mark Zusman
1458           <marklz@rotem.technion.ac.il> for reporting this.
1460 Mon Apr  8 23:33:15 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
1462         * netsvcs/lib/Name_Handler.cpp (recv_request): Fixed a small
1463           bug. In recv_request() ntohl was being called again on length
1464           which was causing problems since the length was already in host
1465           byte order.  The ACE Name Server should now be working on NT.
1467 Mon Apr  8 02:14:30 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
1469         * ace: Fixed a number of minor problems that caused duplicate
1470           symbols when linking ACE with G++ (no-repo) on SunOS 5.x and
1471           SunOS 4.x.  Thanks to Andy Gokhale for help with this.
1473         * ace: Added Jan Rychter <jwr@icm.edu.pl> very nice contribution
1474           of pthreads and DCE threads to ACE.  This should make life
1475           easier for Linux users and users of other pthreads packages.
1477         * ace/Service_Config.cpp (process_directives): Changed the code to
1478           use an auto_ptr to make sure that we always release the
1479           ace_obstack memory, regardless of how we exit.
1481         * ace/OS.i (strerror): Changed sys_errlist to _sys_errlist to work
1482           around bugs with SunOS 4.x.  This will undoubted break some
1483           other twisted UNIX system.
1485         * ace/Local_Tokens.cpp (acquire): Added a return 0 at the very
1486           end...  Thanks to Chris Lahey for reporting this (yet
1487           again... ;-)).
1489         * ace/Parse_Node: Made a bunch of small changes to deal with the
1490           fact that there's no dlerror() equivalent on NT...
1492         * ace/Task.h: The static function instance() should return
1493           ACE_Task_Exit<ACE_SYNCH_1>* (or <ACE_SYNCH_2>), not
1494           ACE_Task_Exit *.  Thanks to Chris Lahey for spotting this.
1496         * ace/Thread_Manager.cpp: added an argument to the exit() method
1497           that allows applications to exit without calling thr_exit.  This
1498           would allow the method to be called from within a pthread
1499           cancellation cleanup routine, without calling thr_exit a 2nd
1500           time.  Thanks to Chris Lahey for suggesting this.
1502         * ace/Log_Record.cpp (operator <<): Changed the verbose option so
1503           that it is an attribute, this will allow the ostream to print
1504           verbose information if necessary.  Thanks to Chris Lahey for
1505           suggesting this change.
1507         * ace/config-win32-msvc*.h: Added the
1508           ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES flag since it appears
1509           that this causes problem with some versions of MSVC++ 4.0...
1511         * Released version 4.0.6 for testing.
1513         * netsvcs/lib/Server_Logging_Handler.h: #included the
1514           Svc_Handler.h file, that absence of which was causing problems
1515           for HP/UX.  Thanks to Richard Orr
1516           <rorr@costello.den.csci.csc.com> for reporting this.
1518         * Made a few minor changes to the source to make sure that it
1519           compiles correctly on SunOS 5.x with G++.
1521         * ace/Thread_Manager.h: Added the insert() method for the non-MT
1522           version of Thread_Manager.  Thanks to Alexandre Karev
1523           <akg@na47sun05.cern.ch> for reporting this.
1525         * ace/Task: Renamed the static double-check lock_ to
1526           ace_task_lock_ to avoid a name conflict with the existing
1527           this->lock_ instance in each class.  Thanks to Prashant for
1528           tracking this down...
1530 Sun Apr  7 14:40:05 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
1532         * examples/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.cpp:
1533           Rolled back a change that replaced #defines with typedefs.  It
1534           turned out the #defines were there for a reason...  Thanks Neil
1535           B. Cohen <nbc@metsci.com> for pointing this out...
1537         * ace/OS.h: Added a new check to deal with the fact that many
1538           versions of Pthreads don't support tid_t (which seems to be an
1539           AIXism...).
1541 Thu Apr  4 01:19:19 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
1543         * Officially released version 4.0.5...
1545         * ace/OS.h (ACE_TSS_TYPE): Somehow the ACE_TSS_TYPE macros ended
1546           up *before* the inclusion of Time_Value.h, which meant that
1547           these macros weren't being expanded properly.  This may help
1548           explain odd behavior with ACE TSS.
1550         * ace/Thread_Manager.cpp (insert): Added a new method that allows
1551           us to insert a thread into an ACE_Thread_Control after it's been
1552           constructed.
1554         * ace/Message_Block: Fixed a typo in the init() method.  Thanks to
1555           Ross Dargahi <rossd@krinfo.com> for noticing this.
1557         * ChangeLog: Finally got all of ACE built on SunOS 5.x and SunOS
1558           4.x using only the stock GNU GCC compiler (i.e., no template
1559           repository...).  This should make it easier to port to other
1560           versions of G++.
1562         * ace/Task: Modified the ACE_Task and ACE_Task_Exit implemenation
1563           so that it only uses 1 TSS key per ACE_Task template
1564           instantation, rather than 1 TSS key per ACE_Task instance.  This
1565           works around horrible limitations with Win32...
1567         * ace/Thread_Manager: Added new methods to set and get the
1568           Thread_Manager used in a Thread_Control.
1570         * ace/Pipe.cpp (open): Fixed a bug in where ACE_Pipe::open did not
1571           set this->handles_, thus a garbage handle gets registered.
1572           Inserted the following two lines at line 53 of Pipe.cpp:
1574           this->handles_[0] = reader.get_handle ();
1575           this->handles_[1] = writer.get_handle ();
1577           Thanks to Kirk Sinnard <kirk.sinnard@lawson.com> for this fix.
1579         * ace/OS.h: Added a couple of fixes for the SCO port.  Thanks
1580           again to Matt Newhook <matthew@neweast.ca>
1582         * ace/OS.cpp: Integrated Detlef's clever scheme for freeing up
1583           thread-specific storage correctly on Win32...
1585         * ace/Task.cpp (ACE_Task): Made sure to initialize the
1586           next_-pointer of ACE_TASK and Message_Queue point to NULL.
1587           This fixes a problem on NT.  Thanks to Karlheinz for 
1588           noticing this...
1590         * include/makeinclude/rules.lib.GNU (VLIB): Fixed up the ACE
1591           makefiles so that we can now build on SunOS 4.x correctly
1592           without using the template repositories...
1594         * ace/Service_Config.cpp: Added a bunch of template
1595           specializations so that GNU G++ can be used to compile ACE on
1596           SunOS 4.x *without* requiring the template repository hacks...
1597           Thanks to Mark Zusman for helping with this.
1599 Wed Apr  3 00:55:12 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
1601         * examples/Reactor/Misc/test_reactors.cpp: Added a new torture
1602           test of the ACE_Reactor and ACE_Task.  Thanks to Detlef for
1603           contributing this...
1605         * netsvcs/bin/Makefile: Removed a stray -lACE_svcs from the
1606           Makefile.  Thanks to Matt Stevens for reporting this.
1608         * ace/Synch.cpp: Fixed two mistakes related to keeping INLINE on
1609           the get_thread_id() and get_nesting_level() when I moved them
1610           into the *.cpp file...  Thanks to Matt Stevens for finding this.
1612         * ace/Reactor.cpp (owner): modified owner() so that it returns
1613           the original owner when setting a new owner.  This makes it
1614           possible to write code like this:
1615           
1616           thread_t t;
1617           
1618           reactor->owner (ACE_Thread::self (), &t);
1619           reactor->handle_events ();
1620           reactor->owner (t);
1622         * ace/SOCK_Connector.cpp (connect): Added an additional check for
1623           errno == EWOULDBLOCK for non-blocking connects due to screwy
1624           semantics of Win32 non-blocking sockets...
1626         * netsvcs/lib/Client_Logging_Handler: Fixed a very obscure bug
1627           that arose due to the way that UNIX select() interacts with
1628           SVR4 MSG_BAND data.  It turns out that you must use the
1629           ACE_Event_Handler::EXCEPT_MASK to get this to work properly
1630           (gag).  This stuff is much easier with SVR4 poll().
1632 Tue Apr  2 13:57:05 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
1634         * ace/OS.i: Fixed an error compiling the new Log_Msg.cpp because
1635           when it inlined OS.i, there were references to
1636           ACE_OS::thread_mutex_*() before the functions were declared
1637           inline.  The references were assumed to be external, and then
1638           when the linkage was actually declared as inline, the compiler
1639           choked.  To fix this, in OS.i, all the thread_mutex_* calls
1640           where moved above the first reference, which was in
1641           ACE_OS::cond_broadcast().  Also moved the mutex*() calls since
1642           they are referenced by the thread_mutex calls.  So the order is
1643           mutex*(), then thread_mutex*(), and then cond*().  Thanks to
1644           Chris Lahey for reporting this.
1646         * netsvcs/lib/Client_Logging_Handler.cpp: Added missing return
1647           values in some of the methods.  Thanks to Tim Harrison for
1648           spotting this...
1650         * ace/Map_Manager.cpp (shared_unbind): It was possible that INT_ID
1651           could be assigned a value from a previously unbound map entry.
1652           The shared_unbind matches the ext_id, but does not see if the
1653           entry had previously been unbound.  This causes a problem if the
1654           INT_ID type is a pointer type, and the user of the map deletes
1655           objects as a result of the unbind returning a 0.  The correct
1656           solution is to include a test for is_free in the shared_unbind
1657           before checking the equality of the ext_id.  Thanks to Phil
1658           Mesnier <phil@envision.com> for reporting this.
1660         * ace/Reactor.cpp (next): Fixed a bug that prevented the
1661           iterator's next() method from detecting the end of the
1662           iteration.  Thanks to Mark Zusman <marklz@rotem.technion.ac.il>
1663           for reporting this.
1665         * ace/Reactor.cpp (advance): Fixed a bug that prevented the
1666           iterator from advancing.  Thanks to Mark Zusman
1667           <marklz@rotem.technion.ac.il> for reporting this.
1669         * ace/Log_Msg.cpp (open): Added a check for logger_key being NULL,
1670           in which case we log to STDERR rather than segfault...
1672         * netsvcs/lib/Server_Logging_Handler.h: Fixed a typo in
1673           the declaration of
1674           
1675           ACE_SVC_FACTORY_DECLARE (ACE_Server_Logging_Acceptor)
1676           
1677           Thanks to Neil Cohen for finding this.
1679 Mon Apr  1 00:17:21 1996  Douglas C. Schmidt  (schmidt@mambo.cs.wustl.edu)
1681         * ace/Time_Value.i: Fixed two stupid bugs in the Time_Value
1682           relational operators.  Thanks to Mathew Newhook
1683           <matthew@thor.udc.neweast.ca> for pointing this out.
1685         * ace/OS.h: Added an extern "C" block around the netdb, net/if.h,
1686           netinet/in.h, arpa/inet.h to work around problems with SCO.
1687           Thanks to Mathew Newhook <matthew@thor.udc.neweast.ca> for this.
1689         * ace/Reactor: Merged the ACE_Pipe into the Reactor
1690           implementation.  This cleans up some nasty OS-specific code in a
1691           clean way.
1693         * ace/CORBA_Handler.cpp (ACE_MT_CORBA_Handler): Fixed some typos
1694           that arose during the transition to the ACE_Pipe.
1696         * ace/Pipe: Added a new open() method that doesn't return the
1697           handles, it just stashes them away for safe keeping.  This is
1698           useful for places like the Reactor.
1700         * ace/Local_Name_Space.h: Added ACE_Export to the front of
1701           ACE_NS_String.  Thanks to Detlef for suggesting this.
1703         * From now on, I'll be numbering each new release of ACE with a
1704           different minor number.  However, the latest version of ACE will
1705           also always be available at
1707           http://www.cs.wustl.edu/~schmidt/ACE.tar.gz
1709           This is useful if you just want to get the latest one without
1710           having to bother with keeping track of minor numbers.  For
1711           instance, that way you can still keep that reference in my
1712           bookmark list and you don't have to remodify it with every
1713           release.  Thanks to the ever-vigilant Chris Lahey for suggesting
1714           this.
1716         * ace: added new a ACE project file (ace.mdp) and Makefile
1717           (ace.mak) to create ACE as a DLL on Win32.  This should greatly
1718           simplify the Win32 build process...
1720         * INSTALL: Added new INSTALL file explaining how to build for
1721           Win32.  
1723         * ace/Thread_Manager.cpp: Fixed a horrible bug with Win32.  On
1724           reasonable systems ACE_Thread::exit() should not return.
1725           However, due to horrible semantics with Win32 thread-specific
1726           storage this call can return (don't ask...).  Therefore, we need
1727           to reacquire the mutex so that we don't get burned when the
1728           Guard automatically releases it when this method returns.  Thanks
1729           to Tim for helping me figure this out.
1731         * ace: Fixed some problems with errno in Remote_Tokens and
1732           Local_Tokens.
1734         * ace/Reactor.cpp: Fixed an annoying preponderance of useless
1735           ACE_MT_SAFE #ifdefs in the Reactor implementation.  Thanks to
1736           Gerolf Wendland <wendland@hpp015.mch2.scn.de> for pointing this
1737           out!
1739 Sun Mar 31 13:09:27 1996  Douglas C. Schmidt  (schmidt@mambo.cs.wustl.edu)
1741         * ace/OS: Changed the implementation of cond_t and rwlock_t for
1742           Win32 to use thread_mutex_t (i.e., CRITICAL_SECTIONS) rather
1743           than mutex_t (i.e., Win32 Mutexes).  This should improve
1744           performance without sacrificing generality (of which there is
1745           none at the moment since we don't have process-wide condition
1746           variables or readers/writer locks on Win32 anyway..
1748         * ace/Thread_Manager.cpp (remove_thr): Fixed bugs in the
1749           ACE_Thread_Manager class.  The wait() member grabbed the
1750           Thread_Mutex lock_, then (if the current_count is not zero)
1751           grabs the Condition lock zero_cond_.  Doing so, however
1752           implicitly released lock_, which meant that another thread could
1753           get into wait(), and wait on zero_cond_.  zero_cond_ was only
1754           signaled from ACE_Thread_Manager::remove_thr() when the
1755           current_count_ is zero, but it signaled with
1756           ACE_Condition_Thread_Mutex::signal(), which only releases one
1757           thread that is waiting on the Mutex.  Thus, any other threads
1758           waiting on zero_cond_ would never be resumed.  The fix was to
1759           use ACE_Condition_Thread_Mutex::broadcast() rather than
1760           ACE_Condition_Thread_Mutex::signal() in
1761           ACE_Thread_Manager::remove_thr().  This fix is only reliable
1762           since remove_thr() is called only when ACE_Thread_Manager::lock_
1763           is held by the calling thread.  Thank to Bruce Worden
1764           <bruce@seismo.gps.caltech.edu> for reporting problem and
1765           suggesting this fix.
1767         * ace/Token: Modified this class so that it only works with
1768           ACE_Thread_Mutex (which is more precise than what was going on
1769           before...).
1771         * ace/Synch.h: Modified ACE_RW_Process_Mutex so that on Win32 it
1772           uses ACE_Process_Mutex until we've got a working
1773           RW_Process_Mutex for Win32...
1775         * ace/Synch: Removed the ACE_Process_Barrier until we get a
1776           working implementation...
1778         * ace/Synch: Changed the ACE_Barrier so that it only tries to work
1779           within a single process.
1781         * ace: Changed all uses of ACE_Condition_Mutex to
1782           ACE_Condition_Thread_Mutex to reflect what's really going on
1783           here...
1785         * Changed all uses of ACE_Mutex to ACE_Thread_Mutex throughout
1786           ACE.  This is *much* more meaningful and makes it possible to do
1787           some great optimizations on Win32!
1789         * ace: Changed all uses of ACE_Mutex_Guard to
1790           ACE_Thread_Mutex_Guard.  This is a more accurate name for how
1791           this is used in ACE.
1793         * netsvcs/lib/Client_Logging_Server: Reengineered the ACE
1794           Client_Logging service so that fits into the ACE network service
1795           format.  This version is particularly interesting since it
1796           illustrates a "Connector-driven" service.  In contrast, all the
1797           other ACE network services are "Acceptor-driven" services.
1799         * netsvcs: Merged the implementation of all the ACE network
1800           services into a single ./netsvcs/lib directory.  Each of these
1801           is now a fully dynamically linkable service.  Created a single
1802           main.cpp program in the ./netsvcs/bin directory.  This main
1803           illustrates how to dynamically link an or all of the ACE network
1804           services to form complete applications.  Thanks to Prashant for
1805           help with this.
1807         * ace/OS.cpp: Changed readv() and writev() so that they will once
1808           again compile for Win32.  Note, however, that if you try to
1809           readv() and writev() on the same descriptor you will lose since
1810           they are not atomic!  However, this stuff is stuff useful if
1811           you're *not* reading/writing to a common descriptor...
1813         * ace/Synch_T.cpp: Removed the ACE_Null_Condition<> template.
1814           This didn't really make any sense...
1816         * ace/OS: Changed the test of lock_.get_nesting_level() in
1817           ACE_TSS_Cleanup::exit () to account for the fact that a
1818           ACE_Recursive_Thread_Mutex now starts out with a nesting level
1819           of 1 when it is first acquired.
1821         * ace/Synch_T: Removed the implementation of ACE_Recursive_Lock.
1822           It just doesn't generalize correctly to other types of
1823           synchronization mechanisms...
1825         * ace/Synch: Reimplemented ACE_Recursive_Thread_Mutex using Dave
1826           Butenhof's <butenhof@zko.dec.com> strategy.  This fixes some
1827           latent race conditions in the original implementation.
1829         * ace: Changed the name of ACE_Recursive_Mutex to
1830           ACE_Recursive_Thread_Mutex since the current implementation
1831           really only works for Thread_Mutexes or Thread_RW_Mutexes...
1833         * ace: Removed the "Assert.h" file and moved its functionality
1834           into Log_Msg.h.  This is more consistent with the rest of the
1835           error reporting and logging in ACE and also avoids some nasty
1836           circular include problems.
1838         * ace/Local_Tokens.cpp: Changed the use of ACE_RETURN so that it
1839           passes in errno.
1840         
1841         * ace/Log_Msg: Changed the arguments to the ACE_RETURN macro so
1842           that errno can be returned explicitly.
1844 Sun Mar 31 15:52:58 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
1846         * ace/Local_Name_Space.cpp (create_manager): Added three new
1847           methods -- list_name_entries, list_name_values, and
1848           list_name_types. They work similar to list_names, list_values,
1849           and list_types (respectively) except they return the entire
1850           tuple associated with a name binding.
1852 Sat Mar 30 16:46:32 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
1854         * ace/SPIPE_Stream.i (send_handle): There was a typo -- the
1855           parameter shouldn't be "const ACE_HANDLE handle", it should
1856           just be ACE_HANDLE handle.
1858 Sat Mar 30 16:09:25 1996  Douglas C. Schmidt  (schmidt@mambo.cs.wustl.edu)
1860         * INSTALL: Added new Win32 installation instructions to build
1861           ACE as a DLL.
1863 Sat Mar 30 14:42:02 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
1865         * Carefully tested ACE on SGI and SunOS 5.x using G++ and CC.
1866           Everything seems to work now...  Released version 4.0.2.
1868         * ace/Acceptor.cpp (ACE_Strategy_Acceptor): Added default
1869           initializations of NULL for service_name_ and
1870           service_description_ in the ACE_Strategy_Acceptor's default
1871           constructor.
1873         * ace: Fixed a slew of warnings for HP/UX.  Thanks to John Morey
1874           for reporting these.
1876         * ace/FILE.h (ACE_FILE_Info): Changed the type of field size_ from
1877           size_t to off_t to avoid warnings from C++ compilers...
1879         * ace/OS.cpp (ftruncate): Added a new function for platforms like
1880           SCO that lack ftruncate().  Thanks to Matthew Newhook
1881           <matthew@neweast.ca> for contributing this.
1883 Sat Mar 30 12:41:16 1996  Douglas C. Schmidt  <schmidt@pride.cs.wustl.edu>
1885         * ace: Removed the ACE_svcs library for the time being and merged
1886           everything back into libACE.  There were two reasons for this
1887           change:
1888           
1889           1. There is a subtle dependency between the ACE_Reactor and the
1890              ACE_Local_Tokens* stuff when deadlock detection is enabled.
1891              This was causing problems.
1893           2. This was driving GNU G++ nuts because of the need to 
1894              do the "prelink."
1896           Sooo, for the time being, there's just one ACE library.  If
1897           anyone wants to take the time to split everything up so that it
1898           works for all different platforms and send me the fixes I'll be
1899           glad to include this in ACE.
1901         * ace/Thread.i: Made the ACE_Thread::thr_self() methods call
1902           down to the ACE_OS::thr_self() methods for the case where
1903           the platform doesn't support threads.  This means that we
1904           only have to set the default thread id in one place...
1906 Sat Mar 30 11:53:31 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
1908         * bin/class2info.awk: Modified the handleClass() AWK function so
1909           that it can correctly deal with the new ACE_Export and
1910           ACE_Svc_Export tags needed to build ACE DLLs...  Here's the
1911           trick:
1913           sub( "^[\t ]*class[\t ]+(ACE_[.]*Export[\t ]+)?", "", $0 )
1915           completely intuitive, eh? ;-)
1917         * apps/Gateway: Reimplemented the Gateway prototype so that it
1918           uses the new Reactor cancel_wakeup() and schedule_wakeup()
1919           methods instead of mask_ops().
1921         * ace/Reactor: Added new high-level <Event_Handler> "scheduling"
1922           operations called schedule_wakeup() and cancel_wakeup().  These
1923           methods utilize the lower-level Reactor mask_ops() methods to
1924           schedule and cancel Event_Handlers for subsequent dispatching by
1925           the Reactor.  I added these new interfaces because they are more
1926           intuitive than calling mask_ops(), which is a non-descriptive
1927           name unless you understand the Reactor implementation...
1929         * ace/config-irix5.*.h: It turns out that on IRIX 5.x the
1930           bi-directional SVR4 pipe semantics are *disabled* by default.
1931           Therefore, I've changed the config-irix4.*.h files to comment
1932           out ACE_HAS_STREAM_PIPES.
1934 Fri Mar 29 08:25:33 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
1936         * ace/ACE.cpp (ldfind): Changed the character given to strtok() to
1937           account for the differences in UNIX and Win32 described in the
1938           follow bullet.
1940         * ace/OS.h: UNIX and Win32 use different characters to separate
1941           pathnames in their runtime LD search path (':' and ';'
1942           respectively).  Therefore, I've added new macros to ACE OS to
1943           account for this stuff portably.  
1945         * ace/OS.i: Changed the behavior of the ACE_OS::thr_self() methods
1946           so that they always return 1 if ACE_HAS_THREADS is *not*
1947           enabled.  This makes application code work correctly across
1948           threaded and non-threaded platforms.
1950         * ace/OS.i: Changed the return value of the Win32 arm of the
1951           ACE_OS::dlopen() and ACE_OS::dlsym() functions so that they are
1952           now identical to the way that UNIX behaves.
1954         * ace/Svc_Conf.y: added a #define for ACE_BUILD_DLL to make Win32
1955           happy...
1957         * ace/Synch.i: Fixed a number of bugs in the ACE_Mutex and
1958           ACE_Thread_Mutex tryacquire_read() and tryacquire_write()
1959           methods.  I was calling mutex_lock() rather than
1960           mutex_trylock()!  Thanks to Prashant for finding this.
1962         * ace/OS.cpp (exit): Fixed a bug caused by the fact that the test
1963           for the nesting level of the recursive mutex should have been
1964           for > 0 rather than > 1.  Thanks to Kirk Sinnard
1965           <1764@mn.lawson.lawson.com> for tracking this down!
1967         * ace/Log_Msg: Enhanced ACE_Log_Msg so that it automatically
1968           caches the process id.  This makes it more robust even if users
1969           don't call open()!
1971         * examples/Connection/non_blocking/CPP-connector.cpp Fixed a bunch
1972           of typos that caused templates to fail on HP/UX.  Thanks to Neil
1973           Cohen for spotting this.
1975         * ace/Shared_Memory_SV: Change all uses of "int id" to "key_t id"
1976           to reflect the new use of key_t in the Memory_Pool.
1978         * ace/Memory_Pool.cpp (ACE_MMAP_Memory_Pool): Fixed a potential
1979           but in the construction of an MMAP memory pool.  Because NT uses
1980           strings rather than integers to name its semaphores we were
1981           passing in junk to the NT Process_Mutex initializer.  Arrgh!  I
1982           fixed this problem by typedef'ing key_t to be char * on Win32
1983           and then updating the ACE_DEFAULT_SEM_KEY to be
1984           "C:\\temp\ace.sem" rather than 1234....  Also added a new macro
1985           called ACE_INVALID_SEM_KEY, which is NULL on NT and -1 on UNIX.
1987         * ace/Log_Msg.cpp (instance): Fixed a typo for HP/UX and
1988           other non-threaded platforms!
1990         * ace/Synch_T.cpp (ACE_TSS_Guard): Added another small fix
1991           to ACE_TSS_Guard to make sure we free up the key when we 
1992           go away.
1994 Thu Mar 28 15:28:44 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
1996         * ace/OS.h: changed the names of macros ACE_DYNAMIC_SVC* to new
1997           names that reflect their new, more general nature now that we've
1998           got the ACE_Static_Svcs stuff...
2000         * ace/Service_Config.cpp (load_defaults): Added a very nice
2001           mechanism that generalizes the configuration of statically
2002           linked services.  This makes it possible to insert statically
2003           linked services into a program without changing any of the
2004           existing ACE_Service_Config code.  These static services can
2005           then be enabled via the svc.conf file using the "static"
2006           directive.  Thanks to Matthew Newhook <matthew@neweast.ca> for
2007           suggesting this and for doing the bulk of the implementation.
2009         * ace: Commented out the ACE_TRACE calls in ACE_Unbounded_Set,
2010           ACE_OS, and all the ACE synchronization wrappers to work around
2011           some horrible dependencies with Win32 and thread-specific
2012           storage...  The moral here is that you have to be careful what
2013           you trace because circualar dependencies abound...  My new
2014           policy is that low-level routines are not automatically traced
2015           because they can cause infinite recursion.
2017         * ace/Synch_T.cpp: Fixed a nasty bug with ACE_TSS_Guard.  This was
2018           causing programs that uses ACE_TSS_Guard to segfault...  Thanks
2019           to Kirk Sinnard <kirk.sinnard@lawson.com> for reporting this.
2021         * ace/Synch: Added "lock()" methods to all the ACE synchronization
2022           wrappers to return the underlying C level object...  This is
2023           necessary at some points in ACE.
2025         * ace/Synch: Fixed a horrible bug in ACE_Recursive_Mutex and
2026           ACE_Recursive_Lock that was causing instant deadlock because the
2027           non-recursive Solaris/Pthread mutex was being acquired too
2028           eagerly...
2030 Thu Mar 28 12:14:57 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
2032         * ace/Map_Manager.cpp (rebind): Added a new method called resize()
2033           which increases the size of the map. Both open() and
2034           shared_bind() make use of this method to dynamically increase
2035           the size of the map.
2037         * ace/Local_Name_Space.cpp (shared_bind): Modified shared_bind()
2038           in accordance to the changes to Map_Manager. shared_bind() no
2039           longer has to check if the map runs out of room since
2040           Map_Manager dynamically grows the map.
2042         * ace/Map_Manager.cpp (shared_bind): Changed shared_bind() so that
2043           when the map reaches max_size_, we grow the map by DEFAULT_SIZE
2044           by making a call to open().
2046 Wed Mar 27 20:00:47 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
2048         * ace/Local_Name_Space.cpp (shared_bind): Fixed a bug which was
2049           allocating memory for a name binding which would fail on a bind
2050           since there already existed a binding. This was causing the
2051           mapped-file to grow even when binds would fail.
2053 Tue Mar 26 13:49:24 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2055         * ace/INET_Addr.i (addr_to_string): Moved the order of
2056           get_host_addr() so that it comes before addr_to_string().
2057           Thanks to Neil Cohen for finding this.
2059         * ace/Synch: Added a new implementation of ACE_Thread_Mutex that
2060           takes advantage of the new ACE_OS::thread_mutex_* mechanisms.
2062         * ace/OS: Added a new set of ACE_OS::thread_mutex_* mechanisms
2063           that map efficiently to either Win32 CRITICAL_SECTIONs or UNIX
2064           mutex_t's with type set to USYNC_THREAD.  This allows ACE to
2065           take advantage of the lightweight Win32 synchronization
2066           mechanisms.  When Windows NT 4.0 comes out, we'll at last have a
2067           perfect mapping since WinNT 4.0 supports
2068           TryEnterCriticalSection!
2070 Tue Mar 26 17:35:31 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
2072         * ace/Map_Manager.cpp: Added two new methods -- total_size() and
2073           current_size() which return the max_size and current_size of the
2074           map respectively.
2076 Mon Mar 25 20:22:25 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2078         * ace/Service_Config.cpp (initialize): Updated the use of ACE_ARGV
2079           to use the new method names.
2081         * ace/ARGV.cpp (ACE_ARGV): Changed the name of the two main
2082           methods of ACE_ARGC from count() and operator&() to argc() and
2083           argv().  This seems much more consistent with UNIX and C/C++
2084           naming conventions.
2086         * ace/ARGV.cpp (ACE_ARGV): Added environment variable substitution
2087           to the ACE_ARGV class using the new ACE::strenvdup() method.
2088           This is transparently available to the ACE Service Configurator
2089           now, which enables the svc.conf file to include things like
2090           this:
2092           dynamic Name_Service Service_Object *
2093              name_svc.so:make_Name_Service() "-p $PORT -h $HOST"
2095         * ace/ACE: Added a new function called strenvdup() that returns a
2096           dynamically allocated duplicate of its <str> argument,
2097           substituting the environment variable if str[0] == '$'.
2099         * ace/Naming_Context: Modified this class so that it now inherits
2100           from ACE_Service_Config.  This enables application programmers
2101           to dynamically link instances of ACE_Naming_Context into their
2102           applications via the svc.conf file.
2104         * ace/OS.i (access): Added a new wrapper for the access() method.
2106         * ace/Local_Name_Space.cpp: Fixed an error in each list_xxx
2107           methods.  If there's an error in the for-loop we must still call
2108           ACE_OS::free() to release resources.  Thanks to the
2109           ever-vigilant Karlheinz Dorn for spotting this.
2111         * ace/Strategies: added virtual methods with name dump() to
2112           ACE_Scheduling_Strategy, ACE_Schedule_All_Reactive_Strategy, and
2113           ACE_Schedule_All_Threaded_Strategy.  These methods are
2114           referenced in ACE_Strategy_Acceptor::dump() method
2115           (Acceptor.cpp).  Thanks to Alexandre Karev for reporting this.
2117         * include/makeinclude: Added a number of changes to allow ACE to
2118           build shared libraries correctly on AIX.  Thanks to Chris Lahey
2119           for these fixes.
2121         * ace/Makefile: added tempinc to the list of directories to delete
2122           for "clean".  Also, between the call to the two sub make files,
2123           added a $(RM) -rf tempinc.  Since we make both libs from the
2124           same directory, we need to delete the tempinc directory to be
2125           sure we don't get the templates generated for libACE included in
2126           libACE_svcs.
2128         * ace/OS.i: Improved the mapping between ACE Win32 GetLastError()
2129           values and POSIX-like errnos.  This is now centralized in the
2130           ACE_FAIL_RETURN macro.
2132         * examples/Threads/test_thread_specific.cpp: Added many new tests
2133           to exercise the ACE thread-specific storage mechanisms on Win32
2134           and UNIX.
2136 Mon Mar 25 4:00:01 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
2138         * ace/Name_Options.cpp (parse_args): Added a new data variable
2139           called database_ that keeps the name of the name server
2140           database. Also added accessor methods for this.
2142         * ace/Local_Name_Space.cpp (create_manager): Changed
2143           create_manager() to use ACE_Name_Options::instance ()->database
2144           () instead of ACE_Name_Options::instance ()->process_name().
2146         * ace/ACE.cpp (ldopen): Added a new method called ldopen that
2147           finds a file either using absolute path or using
2148           LD_LIBRARY_PATH. If the file is found, it opens the file and
2149           returns a pointer to the file.
2151         * ace/Parse_Node.cpp: used the new ACE::ldfind() method to locate
2152           the shared object file.  This makes it possible to put
2153           "relative" names into svc.conf files and then allow ACE to
2154           locate the appropriate shared object DLL.
2156         * ace/ACE: added new methods called ldopen() and ldfind() that
2157           find the file <filename> either using absolute path or using
2158           LD_LIBRARY_PATH.  If found, ldopen() opens the file and returns
2159           a pointer to the file.
2161 Sun Mar 24 10:41:12 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2163         * Compiled ACE successfully on Windows '95.
2165         * ace/OS: Totally redid the ACE thread-specific storage cleanup
2166           mechanism in OS.cpp to avoid bugs with the previous
2167           implementation.
2169         * ace/Synch_T: Modified ACE_TSS_Guard so that it will call
2170           ACE_OS::thr_keyfree () when it's finished.  This should help to
2171           eliminate the unbounded use of thread-specific storage slots
2172           within a thread.
2174         * ace/Thread: added a new method keyfree() that calls down to the
2175           ACE_OS::thr_keyfree ().
2177         * ace/Thread_Manager.cpp: Modified the semantics of
2178           ACE_Thread_Manager::exit () so that it "always" calls
2179           ACE_Thread::exit () even if the user hasn't registered this
2180           thread with the thread manager.  This avoids some subtle
2181           problems that arise typically when I forget to put an
2182           ACE_Thread_Control around the main() function.
2184         * examples/Threads/test_thread_specific.cpp: Added new tests to
2185           ensure that the Win32 TSS cleanup logic is working correctly!
2187         * ace/Log_Msg: Moved the definition of the ACE_FIFO_Send_Msg queue
2188           from the Log_Msg.h file to the Log_Msg.cpp file.  The MSVC++
2189           compiler was having problems with this when building a DLL.
2190           Besides, this needs to be replaced with Sockets for Win32
2191           anyway...
2193         * ace/OS.cpp: Put a safe guard in the readv() and writev()
2194           emulations so that they return ACE_NOTSUP_RETURN if
2195           ACE_HAS_THREADS is enabled.  This is necessary because the
2196           readv() and writev() emulations are *not* atomic if multiple
2197           threads are used.  If someone can provide an atomic
2198           implementation I'll enhance the code to remove the existing
2199           restrictions.
2201         * ace/OS: Created a new macro called ACE_SYSCALL_FAILED, which is
2202           mapped to 0xFFFFFFFF on Win32 and -1 on UNIX.
2204         * ace/Synch and Synch_T: cleaned up the implementation of the
2205           Recursive_Lock and Recursive_Mutex to use the ACE_Guard classes.
2206           This simplifies the code.
2208 Sat Mar 23 16:53:14 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
2210         * ace: Updated all ACE classes to use the new ACE_Export macro.
2211           This will enable them to transparently be used to create a Win32
2212           DLL.  Also added ACE_BUILD_DLL to all the *.cpp files.
2214         * tests/CPP-inserver.cpp (main): Modified CPP-inclient.cpp and
2215           CPP-inserver.cpp to use non-blocking I/O. In particular,
2216           CPP-inserver times out on select and then checks to see if any
2217           connections have arrived. Both applications are also working on
2218           NT. 
2220 Sat Mar 23 15:02:47 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2222         * ace/Local_Tokens.cpp (proxy_): Modified the print statement for
2223           local tokens to account for the fact that thread ids can be
2224           unsigned on some platforms.
2226         * ace/Log_Msg.cpp (log): Modified the output format of the %t
2227           directive to ACE_Log_Msg::log() so that it prints values in
2228           unsigned form rather than signed form.  This fixes a bug with
2229           Win32 on Windows '95.
2231         * ace/ACE: Added two new methods ACE::read_n() and ACE::write_n().
2232           These are now necessary since Win32 distinguishes between
2233           operations on SOCKETs and operations on other forms of HANDLEs.
2235         * ace/ACE: Changed all uses of ACE::set_fl() and ACE::clr_fl() to
2236           ACE::set_flags() and ACE::clr_flags().
2238         * ace/ACE: Changed the name of ACE function handle_timed_connect()
2239           to handle_timed_open() since this is reall what it does...
2241 Fri Mar 22 00:11:19 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2243         * ace/Stack: Added a "Node of last resort" to the
2244           ACE_Unbounded_Stack.  This ensures we are graceful in the face
2245           of memory failures.
2247         * ace/OS.i (sleep): Fixed a bug with the Win32 ACE_OS::sleep
2248           mapping.  This should have had an "ACE_OSCALL_RETURN" in it...
2250         * ace/ACE.h: Had forgotten to put "static" in front of "basename".
2251           Thanks to Neil Cohen for reporting this...
2253         * ace/Name_Options.cpp (process_name): Changed char * to const
2254           char * to avoid compile error.  Thanks to Neil Cohen for this...
2256         * ace/IPC_SAP: Implemented the enable()/disable() methods to work
2257           with non-blocking I/O for SOCKETs on Windows NT.
2259         * ace/OS.i: Modified ioctl() to support the ioctlsocket() call on
2260           Windows NT.
2262         * ace/Log_Msg.cpp (log): Fixed a bug that was caused by not
2263           NUL-terminating the logging string properly when a %a is given.
2264           Thanks to Tim Harrison for finding this.
2266         * ace/OS: Added a new overloaded "ACE_OS::sleep" method that takes
2267           an ACE_Time_Value rather than a u_int.  This is much more useful
2268           for fine-grained timers than the horrible UNIX sleep() call.
2270         * ace/OS.h: #included "sys\timeb.h" in the Win32 version of ACE.
2272 Thu Mar 21 22:18:50 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2274         * apps: Fixed all incorrect usages of ACE_HANDLE = -1 to use
2275           ACE_HANDLE = ACE_INVALID_HANDLE in order to work with Win32...
2277         * ace/OS.i (gettimeofday): Replaced the existing implementation of
2278           gettimeofday with a new version that is shorter, more efficient,
2279           and most importantly, correct...  Thanks to Todd Montgomery. and
2280           Mike Flinn for this stuff.
2282         * ace/ACE: added a new method called basename() that returns the
2283           filename portion of a pathname.
2285 Thu Mar 21 21:51:48 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
2287         * ace/OS.h (ACE_DEFAULT_GLOBALNAME): Added some new #defines for
2288           NT: ACE_DEFAULT_NAMESPACE_DIR, ACE_DEFAULT_LOCALNAME, and
2289           ACE_DEFAULT_GLOBALNAME.
2291         * ace/Local_Name_Space.cpp (ACE_Local_Name_Space): Fixed a subtle
2292           bug. Instead of doing a new char [xxx], I was doing a new char
2293           (xxx). Also, added some #if defined (ACE_WIN32) to support
2294           special cases for NT (for example determining the context file
2295           name). 
2297 Wed Mar 20 02:03:39 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2299         * ace/Log_Msg.cpp (log): If we're writing to stdout or to an
2300           iostream make sure the lock is help to avoid race conditions and
2301           scrambled output.
2303 Tue Mar 19 00:12:25 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2305         * ace/Thread_Manager.h: Added new default values to spawn() and
2306           spawn_n().
2308         * ace/OS.i (sigaction): Added support for signals to the ACE NT
2309           mapping.
2311         * ace/ACE: Added 4 new methods to class ACE: send(), send(),
2312           recv(), recv().  These calls mask some differences between UNIX
2313           and Win32 IPC mechanisms.  Then, reimplemented the Reactor's
2314           notification mechanism to use this.
2316         * ace/OS.i (ACE_OSCALL_RETURN): fixed zillions of warnings on
2317           HP/UX by making a small change to line 151 of the OS.i file.
2318           Thanks to Neil Cohen for reporting this.
2320         * ace/Reactor.cpp: Rewrote the Reactor::notify() mechanism to
2321           avoid using readv() and writev().  These work fine on UNIX, but
2322           don't work correctly on Windows NT due to race conditions.
2323           Basically, we need to reimplement this stuff on Win32 to avoid
2324           the problem.
2326         * ace/OS.h: Added SIGQUIT, SIG_BLOCK, SIG_UNBLOCK, and SIG_SETMASK
2327           definitions to NT.
2329         * ace/Time_Value: added a new set() method to be consistent with
2330           the ACE_Time_Value (long, long) constructor.
2332         * ace/Service_Config.cpp (open): Fixed a bug where the
2333           ACE_Service_Repository and ACE_Reactor weren't being initialized
2334           correctly if the ACE_Service_Config::ACE_Service_Config (const
2335           char *) method was called.
2337         * ace/Service_Config.cpp: Changed the constructor for
2338           Service_Config so that it doesn't barf if the svc.conf file
2339           isn't found.
2341 Mon Mar 18 00:34:45 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2343         * ace/Reactor.h: Hid the inclusion of the Local_Tokens.h file in
2344           the Reactor so that by default there will be no dependency
2345           between libACE and libACE_svcs.  This should prevent compilation
2346           problems on some platforms.
2348         * bin: Included the html-windex shell script from Vincent Pommier
2349           <pommier@volnay.stortek.com>.
2351         * man: Included a shell script to automatically generate an
2352           acewindex.html file.  This file is useful just after running
2353           man2html.  Thanks to Vincent Pommier
2354           <pommier@volnay.stortek.com> for contributing this.
2356         * man/html: I've just used the man2html programs to generate the
2357           html documentation from the man3 directory.  It seems to work
2358           pretty well.
2360         * ace/Assert.h: Added a forward declaration for class ACE_Log_Msg
2361           to fix problems NuMega preprocessing.  Thanks to Mike Flinn
2362           <mike.flinn@smtpgate.aws.waii.com> for finding this.
2364         * ace: Implemented about 1/3rd of the "dump" methods for the
2365           various ACE classes.
2367         * ace/Acceptor.cpp (info): Fixed a bug -- should use PR_AD rather
2368           than ACE_INET_Addr since this is used for SPIPEs as well...
2370         * ace/Synch_T.cpp (ACE_TSS): If ACE_Thread::keycreate () fails
2371           then we do an fprintf() and return at the moment.  It doesn't do
2372           any good to do an ACE_Log_Msg operation since those all require
2373           thread-specific storage and this will just cause a recursive
2374           problem...
2376         * ace/OS.cpp: Removed a memory leak in ACE_OS::thr_destory_tss()
2377           that was caused by forgetting to delete each ACE_TSS_Key_Info
2378           object when we no longer needed it.  Thanks to Mike Flinn
2379           <mike.flinn@smtpgate.aws.waii.com> for finding this.
2381         * ace/OS.cpp: Added a new method to class ACE_OS called
2382           thr_keyfree().  This enables us to free up a thread-specific
2383           storage key on Win32 (it isn't implemented on the UNIX
2384           platforms).
2386         * ace/ACE.cpp (timestamp): In order to get ACE_OS::timestamp to
2387           work on Win32, the wMonth, wDay, wYear structure members were
2388           added to the sprintf statement.  Thanks to Mike Flinn
2389           <mike.flinn@smtpgate.aws.waii.com> for this fix.
2391         * examples: Changed all uses of ACE::send_n (1, ...) to
2392           ACE_OS::write (ACE_STDOUT, ...) to avoid problems with NT's
2393           hacked support for sockets and HANDLEs.  Thanks to Bernd Hofner
2394           <hofner@pd.et-inf.uni-siegen.de> for noticing this.
2396 Sun Mar 17 00:43:14 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2398         * ace/CORBA_Handler.cpp (handle_input): Fixed the CORBA_Handler to
2399           use send()/recv() rather than read()/write().
2401         * ace/Process_Manager: put the hooks in for the forthcoming ACE
2402           Process Manager, which will provide a service similar to the
2403           ACE_Thread_Manager, except that it will work for processes, not
2404           threads.
2406         * netsvcs: all the ACE network services appear to be working
2407           again...
2409         * man: Completely regenerated all the manual pages to reflect all
2410           the most recent changes.
2412         * ace/OS.h: Created a new macro called ACE_DEFAULT_REACTOR_SIZE.
2413           This is useful for two reasons (1) it centralizes this value in
2414           one place in ACE and (2) removes a horrible circular dependency
2415           between the Service_Config.h and Reactor.h...
2417         * ace/Strategies: Added new strategies to handle "scheduling" of
2418           Svc_Handlers launched by a Strategy_Acceptor.  In this context,
2419           scheduling refers to "suspending" and "resuming" Svc_Handlers.
2420           There are several alternative strategies ranging from (1)
2421           suspending/resuming a single handler, (2) suspending/resuming
2422           all the handlers in a Reactor, and (3) suspending/resuming all
2423           handlers controlled by a Thread_Manager.  This very powerful
2424           feature makes it simple to write ACE_Network_Services that can
2425           control all their handlers in one fell swoop...
2427         * ace/Task: Added new accessors/mutators to get/set the
2428           Thread_Manager and the Message_Queue associated with a Task.
2429           This makes life easier and more abstract in subclasses and
2430           elsewhere.
2432         * ace/Reactor: added an iterator to the ACE_Handler_Repository.
2433           This makes it possible to implement the suspend_handlers() and
2434           resume_handlers() very efficiently on both UNIX and Windows NT.
2436         * ace/Reactor: Added two new methods called suspend_handlers() and
2437           resume_handlers().  These methods suspend and resume all the
2438           active Event_Handlers in the Reactor in one fell swoop.
2440         * ace/Reactor.i (suspend_handler): Fixed a bug in the Reactor
2441           where we were not factoring out the code for suspend_handler()
2442           appropriately with respect to locking.
2444         * netsvcs/Logging/Server_Daemon/Thr_Logging_Handler: Enhanced the
2445           threaded logging service so that all active threads can be
2446           automatically suspended and resumed via the ACE_Service_Config
2447           svc.conf file.
2449         * netsvcs/Logging/Server_Daemon/Logging_Handler.cpp: Rewrote the
2450           ACE Logging service to use the new ACE_Strategy_Acceptor
2451           implementation.  This greatly reduced duplicate code.  There's
2452           almost nothing left in this directory save the actual service
2453           itself!
2455         * netsvcs/Tokens: Rewrote the ACE Token service to use the new
2456           ACE_Strategy_Acceptor implementation.  This greatly reduced
2457           duplicate code.  There's almost nothing left in this directory
2458           save the actual service itself!
2460         * netsvcs/Naming: Rewrote the ACE Naming service to use the new
2461           ACE_Strategy_Acceptor implementation.  This greatly reduced
2462           duplicate code.  There's almost nothing left in this directory
2463           save the actual service itself!
2465 Sat Mar 16 20:02:08 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2467         * netsvcs: Created a new subdirectory off of $WRAPPER_ROOT and put
2468           all the ACE network services (e.g., Time, Logging, Naming, and
2469           Tokens) into that directory.  These services all instantiate the
2470           new ACE_Strategy_Acceptor implementation, which greatly
2471           simplifies their behavior and code.
2473         * ace/Acceptor: Made some enhancements to the
2474           ACE_Strategy_Acceptor in order to make it more suitable for use
2475           as a generic "Service" launcher.  This class now defines common
2476           behavior for all the ACE network services (e.g., Time, Logging,
2477           Naming, and Tokens).
2479         * apps/Token_Server: Made the main Token_Server application be
2480           dynamically linked if there's a valid svc.conf file.
2482         * apps/Name_Server/Name_Server: Made the Server_Test a
2483           "well-behaved" service.  Previously, it block in a private event
2484           loop within Name_Server::run(), which was called by
2485           Server_Test::init() when the service was linked dynamically.
2486           This obviously doesn't work correctly since it means that we
2487           can't dynamically link any other services after this one!  The
2488           new version is "event-loop" friendly since it uses the main
2489           Service_Config::run_event_loop() method.
2491         * ACE-categories: Added a new emacs "outline" file that
2492           illustrates how the filenames in $WRAPPER_ROOT/ace cluster into
2493           class categories.  Thanks to Chris Eich
2494           <Chris_Eich@optilink.optilink.dsccc.com> and Alex V. Maclinovsky
2495           <alexm@teltrunk1.tait.co.nz> for helping create this.
2497         * ace: Split ACE into two libraries: libACE and libACE_svcs.
2498           libACE contains the "core" ACE components.  libACE_svcs contains
2499           the client-side layered services (e.g., naming service, token
2500           service, etc.).  There are two reasons for doing this:
2501           
2502           1. It reduces the size of ACE for many common usecases (i.e.,
2503              most people aren't using the naming service or the token
2504              service).  Any future layered services in ACE will be placed
2505              into the libACE_svcs library rather than libACE.
2507           2. It works around annoying compiler bugs with lame compilers
2508              like HP/UX C++.  Now, if those compiles can't compile the
2509              token service (which is very template intensive) it won't
2510              affect the core ACE library components.  This improves the
2511              portability of ACE.
2513        * Added -lACE_svcs to the ./apps/{Token_Server,Name_Server} and
2514          ./examples/{Tokens,Naming} Makefiles to account for the new
2515          libraries.  Note that no source code changes are required...
2517 Fri Mar 15 00:03:48 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2519         * apps/Name_Server/server/Name_Handler.cpp (recv_request): Fixed
2520           the same problem as occurred in Token_Handler (these both come
2521           from the same source...).
2523         * apps/Token_Server/Token_Handler.cpp (recv_request): There was a
2524           subtle bug in the Token_Handler that stems from my old code. 
2525           The line
2527           n = this->peer_.recv ((void *) (((char *) &this->token_request_)
2528                                         + sizeof (ACE_UINT32)), 
2529                                 length);
2531           This should actually be:
2533           n = this->peer_.recv ((void *) (((char *) &this->token_request_)
2534                                           + sizeof (ACE_UINT32)), 
2535                                length - sizeof (ACE_UINT32));
2537           since length was read already.  The old way tried to read 4
2538           bytes too much.  Thanks to Jesper for noticing this.
2540         * ace/Connector.cpp (connect_svc_handler): Modified the connector
2541           so that it automatically calls the close () method of the
2542           Svc_Handler when the connection fails abortively.  This makes
2543           the semantics the same for synchronous and asynchronous
2544           connection invocation modes.  Thanks to Irfan for insisting on
2545           this!
2547         * apps/Token_Server/Token_Acceptor.cpp (handle_input): Changed
2548           return type from int to ACE_HANDLE for NT compatibility.  Thanks
2549           to Jesper for this insight.
2551         * ace/OS.h: The defines for ACE_LACKS_MODE_MASKS (OS.h) were only defined
2552           when !ACE_WIN32.  This has been fixed.  Thanks to Irfan for
2553           spotting this too.
2555         * ace/OS.i (mmap): made a small change to ACE_OS::mmap to fix NT
2556           portability problem (new variable added:nt_flags).  Thanks to
2557           Irfan for spotting this.
2559         * ace/Local_Tokens.h: Added #include "ace/Map_Manager.h" after
2560           line 41 in Local_Tokens.h to allow ACE to compile correctly with
2561           the horrid HP/UX compiler.  Thanks to Neil Cohen for figuring
2562           this out (what a trooper!).
2564         * ace/Local_Tokens.cpp (ACE_TPQ_Entry *): Replace
2566           return ACE_TSS<ACE_TPQ_Entry>::operator ACE_TPQ_Entry *();
2568           with
2570           return  (ACE_TPQ_Entry *) (*((ACE_TSS<ACE_TPQ_Entry> *) this));
2572           to work around problems with MSVC++ 4.0 when the browse option
2573           is enabled.  Thanks to Kirk Sinnard <1764@mn.lawson.lawson.com>
2574           for this fix.
2576         * ace/config-sunx86-sunc++-4.x.h: Swapped the lines
2578           // Compiler/platform supports SVR4 signal typedef.
2579           //#define ACE_HAS_SVR4_SIGNAL_T
2580           #define ACE_HAS_CONSISTENT_SIGNAL_PROTOTYPES
2582           to
2584           // Compiler/platform supports SVR4 signal typedef.
2585           #define ACE_HAS_SVR4_SIGNAL_T
2586           //#define ACE_HAS_CONSISTENT_SIGNAL_PROTOTYPES
2588           to avoid an error using ProWorks C++ 4.0.1 (w/ patches) which
2589           blow up in the Signal.x stuff with a prototyping error.  Thanks
2590           to John P. Hearn <hearn_j@sat.mot.com> for this recommendation.
2592         * ace/Shared_Memory.h: The conditional compilation wrapper was out
2593           of date, so I renamed it.  Thanks to Alex V Maclinovsky
2594           <alexm@teltrunk1.tait.co.nz> for reporting this.
2596 Thu Mar 14 23:18:59 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2598         * ace/Thread.h: There was a bug in the ACE_Thread class.  I
2599           attempted to make the class uninstantiable by making the
2600           constructor private.  However, the statement was:
2602           private:
2603           Thread (void);
2605           which is not the definition of the ctor!  The code compiled
2606           since it thinks Thread is a member function.  As a result, you
2607           could instantiate a object of ACE_Thread class, but no longer...
2608           Also added this to the !defined (ACE_HAS_THREADS) arm of the
2609           conditional compilation.  Thank to Sandeep Joshi
2610           <sandeepj@emailbox.att.com> for noticing this.
2612         * ace/Log_Record.i (decode): Fixed a stupid typo where htonl
2613           (this->length_) should have been htohl (this->length_)...
2614           Thanks to Audun Tornquist <Audun.Tornquist@iu.hioslo.no> for
2615           noticing this.
2617 Tue Mar 12 14:51:39 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
2619         * ace/Name_Request_Reply.cpp (decode): Added ntohl and htonl calls
2620           wherever data was being exchanged.
2622 Sat Mar  9 17:49:51 1996  Tim H. Harrison  (harrison@lambada.cs.wustl.edu)
2624         * ace/OS.i (cond_wait): Updated the Win32 implementation to
2625           correspond precisely with the UNIX semantics where the mutex is
2626           always reacquired even when errors occur.
2628 Mon Mar  4 23:03:37 1996  Tim H. Harrison  (harrison@lambada.cs.wustl.edu)
2630         * INSTALL: updated the win32 to describe building test
2631           applications.
2633 Mon Mar  4 16:17:05 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
2635         * ace/Local_Name_Space.cpp (resolve): Fixed a small bug. The type
2636           field in resolve was copying extraneous stuff (because of being
2637           kept around as a wchar_t). So I added a new method to the class
2638           ACE_NS_String called len() which simply returns len_. Using this
2639           I can now do a strncpy of len bytes for type (instead of a
2640           simple strcpy) and then null-terminate the string to remove the
2641           garbage.
2643 Thu Feb 29 23:41:04 1996  Tim H. Harrison  (harrison@lambada.cs.wustl.edu)
2645         * ace/Token_Request_Reply.cpp: Fixed a byte-order bug which was
2646           showing up on intel platforms.
2648         * ace/Remote_Tokens.cpp: Fixed a race condition in
2649           ACE_TSS_Connection which was munging mt token server clients.
2651         * examples/Tokens/mutex/*: The Token Server example applications
2652           now use ACE_Thread_Manager, which should make them portable to
2653           Win32.
2655         * apps/Token_Server/Token_Server.cpp: The Token Server is now a
2656           Service_Object which can be dynamically linked.
2658         * ace/OS.i: Win32 ACE_OS:: signal methods now return 0 instead of
2659           -1.  So, calls to signal code succeed, but do nothing useful.
2661 Thu Feb 29 20:38:32 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2663         * apps/Logger/Server_Daemon/Server_Logger.cpp
2664           (handle_logging_record): There was a typo where
2665           ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES was incorrectly spelled.
2666           This caused problems on HP/UX.  Thanks to Neil Cohen for
2667           finding this.
2669 Wed Feb 28 11:41:49 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2671         * ace/Mem_Map.cpp: Fixed a nasty bug with Win32 memory mapping...
2672           It turns out we need to be very careful when remapping a
2673           previously mapped region if the MapViewOfFile we're trying to
2674           establish *grows* beyond what was originally mapped with
2675           CreateFileMapping().  The new scheme seems to work correctly
2676           with both UNIX and Win32.
2678         * ace/OS.h: apparently when using MFC library functions it
2679           is not possible to include windows.h.  Instead, users 
2680           must include AFX.h.  Therefore, I've modified OS.h to 
2681           include the following:
2683           #if !defined (__AFX_H__)
2684           #include <windows.h>
2685           #endif /* __AFX_H__ */
2687           Thanks to Patty Genualdi (genualdp@agcs.com) for pointing this
2688           out.
2690         * ace/Memory_Pool.cpp: Modified init_acquire() so that it calls
2691           ACE_Mem_Map::open() rather than ACE_Mem_Map::map() the first
2692           time.  This ensures that the file is mapped correctly.
2694         * ace/Mem_Map: Added a new method called open() that creates/opens
2695           a file without actually mapping it.
2697         * ace/SOCK_Dgram_Mcast.cpp (make_multicast_address): Added 
2698           new support for Windows NT.
2700         * ace/Memory_Pool: reimplemented ACE_MMAP_Memory_Pool so that uses
2701           ACE_Mem_Map.  This ensures that we can leverage all the work
2702           that went into making ACE_Mem_Map work on Win32.
2704         * ace/Memory_Pool.cpp (map_file): Modified the code so that we
2705           always unmap the file before trying to remap it.  This avoids
2706           problems with Win32...
2708         * ace/Mem_Map: Modified the implementation of ACE_Mem_Map so that
2709           it takes advantage of the improved features in ACE_OS::mmap.
2710           Also added new a method that returns the memory-mapped addr more
2711           easily.
2713         * ace/OS: Modified the ACE_OS::mmap() method so that it is more
2714           efficient for remapping files on Win32.
2716         * ace/OS.h: renamed the type QWORD to ACE_QWORD to avoid namespace
2717           pollution.  Thanks to Patty Genualdi (genualdp@agcs.com) for
2718           pointing this out.
2720         * ace/OS.h: Changed the value of the SIGPIPE emulation for Win32
2721           to match the UNIX value in order to avoid problems.  Thanks to
2722           Jesper for noticing this.
2724         * apps/Token_Server: Fixed misuse of int for ACE_HANDLE in various
2725           places.  Thanks to Jesper for noticing this.
2727         * Renamed the ./tests directory to ./examples to make way for the
2728           new ACE regression tests.  These tests will go into the new
2729           ./tests directory.
2731         * ace/Mem_Map.cpp: Added a destructor and a close() method that
2732           closes down the file HANDLE if we allocated it.  This is useful
2733           to prevent descriptor leaks.  Thanks to Irfan for suggesting
2734           this.
2736         * ace: Made a number of changes to remove unreferenced parameters
2737           from ACE methods.  This eliminates zillions of warning from the
2738           HP/UX compiler.  Thanks to Neil Cohen for reporting this.
2740         * ace/Local_Name_Space.cpp (resolve): revised some code to work
2741           around bugs with the HP/UX compiler...  Thanks to Neil Cohen for
2742           this workaround.
2744 Tue Feb 27 21:06:09 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2746         * ace/OS.i: The Win32 CreateFile does not handle the return you
2747           would expect when the file exists.  You would expect EEXISTS (17
2748           in UNIX) but the GetLastError is set to 80
2749           (ERROR_FILE_EXISTS).  Therefore, I changed ACE_OS::open to map
2750           ERROR_FILE_EXISTS onto EEXIST.  This is only a partial solution,
2751           however.  There must be a better way to handle this!
2753         * ace/Mem_Map.cpp (ACE_Mem_Map): Fixed a bug with one of the
2754           ACE_Mem_Map destructors that was causing problems due to the
2755           fact that base_addr_ wasn't being initialized to 0.  Thanks to
2756           Karlheinz for noticing this.
2758         * ace/Signal.i: signals on AIX cannot use sigprocmask() in any
2759           multithreaded programs.  Instead, the call
2760           ACE_OS::thr_sigsetmask() should be used since it is used to
2761           update the thread signal mask.  This comes up only in the
2762           Sig_Guard constructor and destructor.  Therefore, I #ifdef the
2763           call under the ACE_MT_SAFE macro, using sigprocmask() in the
2764           #else case.  Thanks to Chris Lahey for reporting this.
2766         * tests: removed all uses of ACE_OS::join (0, ....) in ACE and
2767           replaced them with ACE_Thread_Manager::wait() calls.  This
2768           ensures that the ACE code is portable to Win32 and POSIX
2769           pthreads! 
2771         * ace/Dynamic_Service.cpp: Added a #include of
2772           "ace/Service_Config.h" to work around problems with HP/UX.
2773           Thanks to John Morey for reporting this.
2775 Sun Feb 25 12:10:38 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2777         * apps/Token_Server: changed the name token_server.cpp to main.cpp
2778           to avoid a name clash on Win32...
2780         * man/man3: updated all the ACE manual pages to reflect the
2781           most recent changes.
2783         * ace/OS.i: Implemented the cond_timedwait() method correctly in
2784           ACE_OS.  This method should now do the right thing with respect
2785           to blocking, polling, and timewaits for Win32.
2787         * ace/OS.i: Modified the Win32 implementation of all the
2788           socket-related wrappers in ACE_OS.  The new implementation very
2789           cleverly sets errno to the result of WSAGetLastError() if a
2790           socket-related call fails.  Since all of the WinSock errors are
2791           mapped into their equivalent UNIX errno values this enables
2792           socket applications to work portably for UNIX and Win32.        
2794         * ace/Malloc_T.cpp (ACE_Malloc): Improved error reporting for
2795           cases where the Memory_Pool::init_acquire() fails (e.g., if the
2796           backing store was already created by another user and we don't
2797           have permission to access it...).
2799         * ace/Task: modified Task.h so that it is no longer necessary to
2800           write #include "ace/Synch_T.h" in order to use ACE_MT_SYNCH,
2801           etc.
2803         * ace/SOCK.cpp (DllMain): Added a clever "Schwartz counter" to
2804           make sure that the WinSock library is correctly initialized,
2805           even if we're not using ACE as a DLL!!!
2807         * tests/Mem_Map/file-reverse: got the file reverse test program
2808           working.  The ACE_Mem_Map class should now be ported to Win32...
2810         * ace/OS.i (open): Changed how the O_CREAT flag was handled
2811           to give it UNIX semantics...
2813 Sat Feb 24 12:55:27 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2815         * ace/UPIPE_Stream.cpp (recv): Fixed a signed/unsigned mismatch.
2816           There should be no more mismatches in ACE...
2818         * ace/Name_Proxy.cpp (recv_reply): Fixed a signed/unsigned
2819           mismatch.
2821         * ace/Message_Block.cpp (copy): Fixed a signed/unsigned mismatch.
2823         * ace/INET_Addr.cpp (get_host_name): Changed the type of the
2824           hostnamelen parameter from int to size_t to be more "abstract."
2825           This will also prevent a warning from the MSVC++ compiler.
2827         * apps/Logger/Client_Daemon/Client_Logger.i: Fixed a braino with
2828           network byteoder that was causing Client_Logger::send() to fail
2829           on INTEL boxes.  Thanks to Bryon G. Rigg
2830           <bgrigg@opus.bcbnet.com> for finding this.
2832 Fri Feb 23 01:59:34 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2834         * ace/OS.i: Enhanced mmap() to give the same semantics as UNIX
2835           mmap() by using MapViewOfFileEx().  Also greatly improved the
2836           UNIX emulation capabilities so that mmap() now has the same API
2837           for UNIX and Win32.
2839         * ace/Time_Value: Added functions to constructor and conversion
2840           from/to Win32 FILETIME. This enables us to reuse those 100ns
2841           conversions in ACE_Profile_Timer.
2843         * ace/Time_Value: Fixed a problem with these:
2845           // True if tv1 < tv2.
2847           INLINE int
2848           operator < (const ACE_Time_Value &tv1, 
2849                       const ACE_Time_Value &tv2)
2850           {
2851             ACE_TRACE ("operator <");
2852             return tv2 > tv1;
2853           }
2855           This should be "tv2 >= tv1".  Same problem was fixed with
2856           operator <=.
2858         * ace/Profile_Timer.i, fixed the following:
2860           this->end_time_ = ACE_OS::gettimeofday ();
2861           this->last_time_ = this->end_time_;
2862           this->last_usage_ = this->end_usage_;
2863           ACE_OS::getrusage (RUSAGE_SELF, &this->end_usage_);
2865           This will overwrite end_time before it is saved to
2866           last_time...
2868         * tests/Threads: Added Jesper's test for readers/writers locks.
2869           The test adds a number of reader and writer threads.  When
2870           active, writers modify a shared variable and verify that only
2871           one writer and no readers are active.  When active, readers
2872           check that no writers are active and that the shared data is
2873           never changed.  The test passes for different ratios of
2874           readers/writers, and debug output shows that several readers are
2875           allowed simultaneously. Or, in other words, we have an
2876           indication that it should work.
2878         * ace/OS.i: Added Win32 implementations of getpid(), fork(),
2879           lseek(), dup(), cond_timedwait (), getrusage ()
2881         * ace/OS.i: Modified all the ACE_OS::str* routines so that they no
2882           longer do an ACE_OSCALL_RETURN.  This can lead to weird bugs...
2883           Thanks to Jesper for noticing this.
2885         * ace/config-sunos4-sun4.1.4.h: Added a new config file that
2886           should work with SunOS 4.x...  Also added support for SunOS
2887           4.1.4.  Thanks to Mick Adams (eeimas@eei.ericsson.se) for help
2888           with this.
2890 Thu Feb 22 18:58:36 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
2892         * tests/Naming/Client/Name_Service.h (ACE_Service_Object):
2893           Modified test application to make use of ACE_Dynamic_Service.
2895         * ace/Dynamic_Service.h: Added a new class called Dynamic_Service
2896           which provides a general interface to add and retrieve arbitrary
2897           things into the ACE service repository.
2899         * apps/Name_Server/README: Rearranged files so that Name_Server
2900           and Name_Handler are now contained in the server directory under
2901           apps and are no longer under /ace. Also, the Dump_Restore
2902           directory has been moved under /tests/Naming.
2904 Thu Feb 22 01:56:46 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2906         * ace/INET_Addr.cpp (set): Fixed a byteorder bug in ACE_INET_Addr
2907           that was causing problems when ACE was used on Win32 running on
2908           Intel platforms...
2910         * ace/Mem_Map.cpp (map_it): Fixed ACE_Mem_Map so that it will work
2911           correctly on Win32.
2913         * ace/SOCK_Stream.i: Changed the implementation of the Win32
2914           versions of send() and recv() so that they will never use the
2915           read() and write() calls.  This works around limitations with
2916           Win32, which can't do a ReadFile() or WriteFile()
2917           *synchronously* with a SOCKET.
2919         * Changed all occurrences of read (0, ...) to read (ACE_STDIN,
2920           ...)  and all occurrences of write (1, ...) to write
2921           (ACE_STDOUT, ...) in order to be compatible across UNIX and
2922           Win32.
2924         * tests/ASX/Event_Server: Fixed up all the socket I/O calls so
2925           that they use the WinSock send()/recv() methods rather than
2926           ReadFile and WriteFile...
2928         * ace/OS.i: Updated open() to correctly emulated UNIX open()
2929           semantics on Win32.
2931         * ace/OS.cpp (thr_exit): Added support to the NT port so that
2932           thr_exit() doesn't endup doing multiple deletions of the same
2933           object.  Thanks to Karlheinz for this fix.
2935         * ace/OS.h: Moved the location of ACE_MAXCLIENTIDLEN so that
2936           MAXHOSTNAMELEN would be correctly visible for NT.
2938         * ace/Reactor.cpp: Added a temporary fix for the fact that
2939           writev() and readv() don't work correctly yet on NT.  The
2940           solution is to replace write() with two writes() and readv()
2941           with two reads() for the Reactor's notification scheme.  A
2942           better solution should be forthcoming.
2944         * ace/Reactor.cpp: Made sure to initialize the timer_queue_ to 0
2945           in the constructors so that the Reactor's destructor can avoid
2946           crashing horribly if the constructor fails.  Thanks to Karlheinz
2947           for pointing out the need for this.
2949         * ace/SOCK.cpp: Added support for WSAStartup for using WinSock
2950           within the ACE_SOCK class.
2952 Wed Feb 21 21:05:55 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2954         * ace/ACE.cpp (bind_port): Made a quick fix to work around the
2955           fact that NT doesn't set errno...
2957         * ace/OS.i (mmap): Fixed a bug in mmap for the NT port.  It should 
2958           return MAP_FAILED on error rather than 0 to be equivalent to the
2959           UNIX version.  Thanks to Irfan for spotting this.
2961 Mon Feb 19 00:31:42 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
2963         * ace/Typed_SV_Message.i (ACE_Typed_SV_Message): Modified the
2964           constructor calls so that length_ and max_size_ are correctly
2965           set when created.  Thanks to Alexandre Karev
2966           <akg@na47sun05.cern.ch> for reporting this.
2968         * ace/SV_Message_Queue.i (remove): fixed bug in
2969            ACE_SV_Message_Queue::remove method where `internal_id_' member
2970            was modified *BEFORE* it was used the last time in
2971            ACE_SV_Message_Queue::control.  Thanks to Alexandre Karev
2972            <akg@na47sun05.cern.ch> for reporting this.
2974         * ace/Typed_SV_Message.i (length): Fixed a minor typo that caused
2975           a bigger bug ;-).  Thanks to Alexandre Karev
2976           <akg@na47sun05.cern.ch> for reporting this.
2978         * ace/OS.h: Added new macros that allow programs to portably
2979           access stdin, stdout, and stderr HANDLEs on Win32 and UNIX as
2980           follows:
2982           #if defined (ACE_WIN32)
2983           #define ACE_STDIN GetStdHandle (STD_INPUT_HANDLE)
2984           #define ACE_STDOUT GetStdHandle (STD_OUTPUT_HANDLE)
2985           #define ACE_STDERR GetStdHandle (STD_ERROR_HANDLE)
2986           #else
2987           #define ACE_STDIN 0
2988           #define ACE_STDOUT 1
2989           #define ACE_STDERR 2
2990           #endif /* ACE_WIN32 */
2992         * ace/INET_Addr.i: modified the return value of get_port_number so
2993           that it returns the value in host byte order.  This has actually
2994           been a latent bug in ACE for years, but it only surfaced
2995           recently after porting to NT on the Intel instruction set (which
2996           is "little-endian").
2998         * tests/ASX/Event_Server: Merged in the latest changes to the
2999           Event_Server tests, which enable it to compile on Windows NT.
3000           Now, I just need to get it working on NT...
3002         * Updated all of ACE to use the new ACE_ASSERT rather than assert.
3004         * ace/Assert.h: Added a new file and a new macro called
3005           ACE_ASSERT.  This uses the ACE_Log_Msg Singleton to provide a
3006           more consistent means to do assertions.  Thanks to Alexandre
3007           Karev <akg@na47sun05.cern.ch> for suggesting this.
3009         * ace/Log_Msg.cpp (log): added for method ACE_Log_Msg::log lines
3010           to skip the `sprintf' part for %N - file name and %l - line
3011           number format specifiers.  Thanks to Alexandre Karev
3012           <akg@na47sun05.cern.ch> for reporting this.
3014         * Remote_Name_Space: Removed an initalizer to ACE_WString that was
3015           driving the HP/UX compiler nuts.
3017 Sun Feb 18 18:11:22 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3019         * ace/Synch.h (ACE_Null_Condition_Mutex): Added a missing body to
3020           the wait() method.  Thanks to Byron Riggs for noticing this.
3022 Sat Feb 17 19:10:06 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
3024         * tests/Naming/README (client): Added description for new
3025           features, including support for list_values and list_types. Also
3026           added a small description about test programs using DLL.
3028         * ace/Name_Request_Reply.cpp (decode): Fixed a small bug in
3029           ACE_Name_Request::decode. type_ was not null terminated causing
3030           some garbage to be returned.
3032 Thu Feb 15 14:57:06 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
3034         * ace/Remote_Name_Space.cpp: Changed names of some parameters to
3035           comply with ACE syntax.
3037 Wed Feb 14 13:36:31 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
3039         * ace/Local_Name_Space.cpp (resolve): Type support has been added
3040           to Name_Server. A new class called ACE_NS_Internal was created to
3041           keep value and type information.
3043 Fri Feb  9 17:12:00 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3045         * "Officially" released ACE 4.0
3047         * ace/OS.i (sema_post): Fixed a bug in the NT port.
3049                 #elif defined (ACE_HAS_WTHREADS)
3050                   return ::ReleaseSemaphore (*s, 1, 0);
3051                 #endif /* ACE_HAS_STHREADS */
3053           This returns 1 for success, and disturbs cond_broadcast...
3054           This was replaced by:
3056                 #elif defined (ACE_HAS_WTHREADS)
3057                   return ::ReleaseSemaphore (*s, 1, 0) ? 0 : -1;
3058                 #endif /* ACE_HAS_STHREADS */
3060           Thanks to Jesper S. M|ller  (stophph@diku.dk) for this.
3062         * ace/OS.i (cond_init): Fixed a bug in the NT condition synch
3063           code, as the initial count of the semaphore was 1. This gives an
3064           inconsistent condition: The first waiter went straight through...
3065           Change in ACE_OS::cond_init:
3067                 if (ACE_OS::sema_init (&cv->sema_, 0, type, name, arg) != 0)
3068                   return -1;
3070           Thanks to Jesper S. M|ller  (stophph@diku.dk) for this.
3072         * ace/Singleton.cpp: Fixed a stupid bug that was caused by failure
3073           to #include "ace/Synch_T.h"...  Thanks to Neil Cohen and Byron
3074           Riggs for giving me insights on what the problem was.  ACE now
3075           compiles on HP/UX.
3077 Fri Feb  9 11:07:04 1996  Prashant Jain  (pjain@merengue.cs.wustl.edu)
3079         * tests/Naming/server/Server_Test.cpp (init): Modified server
3080           tests to dynamically link Naming Services.  Both client and
3081           server tests now make use of the ACE dynamic linking mechanisms.
3083         * ace/Local_Name_Space.cpp: Added list_values() to Name
3084           Server. The functionality is very similar to list_names (returns
3085           list of values that match a pattern).
3087         * tests/Naming/client/Client_Test.cpp (bind): Replaced all uses of
3088           cerr and cout with ACE_ERROR, ACE_ERROR_RETURN, and ACE_DEBUG.
3089           Split the file Client_Test.cpp into two files -- Client_Test.cpp
3090           and Name_Service.cpp (similarly .h file) each containing the
3091           corresponding class. Modified svc.conf to work with the changes.
3093 Thu Feb  8 02:05:26 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3095         * ace/Log_Msg.cpp (log): Enhanced the Log_Msg class so that it
3096           supports "nested" calls via %r.  If SILENT mode enabled, nested
3097           outputs will enclosed in {..} brackets in thread-specific
3098           storage.  Thanks to Alexandre Karev <akg@na47sun05.cern.ch> for
3099           suggesting this.
3101         * ace/Synch: Added a new class called ACE_Null_Condition_Mutex.
3102           This is necessary to fix bugs with stupid compilers...  Thanks
3103           to Zusman Mark <marklz@rotem.technion.ac.il> for reporting this.
3105         * tests/Naming/client: made a first pass implementation of a
3106           client application that dynamically links in a Naming_Context
3107           based on information provided by the svc.conf file.
3109         * ace/Name_Options: Fixed yet more problems with dynamic memory
3110           management.  The old version didn't make a copy of the strings
3111           it was passed and this caused major problems.
3113         * ace: Fixed a whole slew of problems with the ACE Name Server
3114           stuff that arose from inconsistent use of const char * vs.  char
3115           *...
3117 Wed Feb  7 00:58:45 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3119         * ace/CORBA_Handler.cpp (ACE_MT_CORBA_Handler): Added new
3120           enhancements to ACE_MT_CORBA_Handler to make it work correctly
3121           with Windows NT.  Thanks to Irfan for making these changes.
3123         * ace/Connector.cpp (fini): Make another workaround for bugs with
3124           MSVC++ 2.0...
3126         * ace/SPIPE_Connector.cpp (connect): Added a call to ACE_CLR_BITS
3127           (flags, O_CREAT) to make darn sure that the O_CREAT flag is not
3128           set.  Thanks to Chris Cleeland for suggesting this.
3130 Tue Feb  6 01:40:29 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3132         * ace/OS.h: added a new prototype to OS.h that should help with
3133           portability to nasty platforms with broken rand_r() definitions.
3134           Thanks to Aurelio Nocerino
3135           <aurelio@irsipcs2-27-le0.irsip.na.cnr.it> for suggesting this.
3137         * Local_Tokens: Changed all uses of enumerals MAXTOKENNAMELEN and
3138           MAXCLIENTIDLEN to symbol #defines ACE_MAXTOKENNAMELEN and
3139           ACE_MAXCLIENTIDLEN.  This works around bugs with HP/UX.
3140           Thanks to Neil Cohen for reporting this problem.
3142         * ChangeLog: split the ChangeLog files into 4 separate files --
3143           one for '96, '95, '94', and '93.  Hard to believe I've been
3144           working on this stuff for so long!
3146         * ace/OS: Fixed the use of ::memset to replace sizeof buffer with
3147           sizeof (ACE_SERVENT_DATA) and sizeof (ACE_HOSTENT_DATA).  This
3148           fixes bugs that surfaced on AIX.  Thanks to Chris Lahey for
3149           finding these.
3151         * ace/SPIPE_Addr.cpp (ACE_SPIPE_Addr): Fixed a bug in
3152           SPIPE_Addr::SPIPE_Addr(const SPIPE_Addr&).  What happens is that
3153           when the size is calculated it does not take into account the
3154           required zero byte at the end of the rendezvous_ member.  Thanks
3155           to Chris Cleeland <chris@envision.com> for reporting this.
3157         * ace/Local_Tokens: Had to move all ACE_Token_Proxy methods from
3158           Local_Tokens.i to Local_Tokens.cpp and remove INLINE - otherwise
3159           gcc reported them as undefined methods during linkage stage.
3160           Thanks to Zusman Mark <marklz@rotem.technion.ac.il> for
3161           reporting this.
3163         * ace: Changed ACE_Name_Request_Reply::LAST to
3164           ACE_Name_Request_Reply::MAX_ENUM to avoid problems with name
3165           conflicts on OSF/1.  Thanks to Eshel Liran
3166           <liran@bimacs.cs.biu.ac.il> for suggesting this.
3168         * ace/Synch_T: Fix all definitions of ACE_Atomic_Ops so that they
3169           compile correctly on platforms that lack threads!  Thanks to
3170           Alexandre Karev <akg@na47sun05.cern.ch> for noticing this.
3172         * include/makeinclude: Added a new config file from Bryon G. Rigg
3173           <bgrigg@opus.bcbnet.com>, which should allow ACE to build on
3174           Linux.
3176         * ace/Remote_Tokens.cpp: Moved ACE_TSS_Connection to
3177           Remote_Tokens.h to avoid problems with AIX.  Thanks to the
3178           ever-vigilant Chris Lahey for reporting this.
3180 Mon Feb  5 23:34:42 1996  Tim H. Harrison  (harrison@lambada.cs.wustl.edu)
3182         * Added CORBA_Ref.h which contains the new class ACE_CORBA_Ref.
3183           This class provides a nice wrapper for making the use of Orbix
3184           object references more transparent.  This is done by automating
3185           the release and duplicate calls.
3187 Mon Feb  5 15:43:17 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3189         * ace: added Prashant's latest changes to the Name_Handler*,
3190           Naming_Context*, and Remote_Name_Space*.  These changes make it
3191           possible to retrieve lists of values based on a pattern, which
3192           can be a regular expression.
3194         * Moved the apps/Name_Server/Client-Server tests into tests/Naming
3195           and most of the apps/Token_Server/* tests into tests/Tokens to
3196           conform to Karlheinz's testing style.
3198         * ace: Modified a number of files in ACE to make it compile
3199           correctly with MSVC++ 2.0.
3201 Sun Feb  4 23:58:43 1996  Douglas C. Schmidt  (schmidt@mambo.cs.wustl.edu)
3203         * ace/Reactor: Generalized ACE_Null_Callback to work correctly
3204           with Windows NT (which lacks pipes).  The new design uses the
3205           ACE socket wrappers for NT.  It requires very few changes to the
3206           code to handle NT now!  Also changed the name to
3207           ACE_Notification_Handler, which is more descriptive.
3209 Sun Feb  4 14:47:50 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3211         * ace/Remote_Tokens.cpp: Reworked ACE_Singleton to avoid
3212           portability problems on compilers like GCC.
3214 Thu Feb  1 12:47:46 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3216         * ace/Remote_Tokens.cpp: Generalized the parameters passed into
3217           ACE_Singleton so they would compile on HP/UX and other platforms
3218           that lack threads.  Thanks to Neil Cohen for noticing the
3219           problem.
3221 Wed Jan 31 22:49:13 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3223         * ace: Modified a number of minor things in ACE to get it to
3224           compile successfully with Windows NT MSVC++ 4.0.  Updated the
3225           INSTALL file to explain this process better...
3227 Tue Jan 30 01:12:07 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3229         * ace/CORBA_Handler.cpp: changed things so that no diagonistic
3230           messages are printed.
3232         * Regenerated all the ACE manual pages to bring them up to date
3233           with the recent changes.
3235         * ace/Malloc.h: Modified the ACE_Malloc header file so that it
3236           works correctly when ACE_MALLOC_STATS is enabled.  Thanks to
3237           Alexandre Karev <akg@na47sun05.cern.ch> for reporting this.
3239         * ace/OS.cpp (mutex_lock_cleanup): removed the leading & before
3240           p_lock.  Thanks to Chris Lahey for noticing this.
3242         * ace: Added the new ACE_Singleton class.  This class uses the
3243           Adapter pattern to turn ordinary classes into Singletons
3244           optimized with the Double-Check pattern.
3246         * Added Tim's latest Token Server changes (which include support
3247           for local and remote mutexes and readers/writer locks) and
3248           Prashant's latest Name Server changes (which allows the contents
3249           of a Name Server to be dumped and restored to/from an ASCII
3250           file).
3252 Mon Jan 29 02:22:23 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3254         * ace/Handle_Set: Changed MAX_SIZE and WORD_SIZE to MAXSIZE and
3255           WORDSIZE to avoid name collisions with HP/UX.  Thanks to Byron
3256           Rigg <bryon_rigg@mail.telecorpsys.com> for suggesting this.
3258         * ace/Time_Value.h: Added a new config symbol ACE_HAS_SVR4_TIME to
3259           differentiate between UNIX platforms that support "POSIX_TIME"
3260           (i.e., timespec_t) and those that support "SVR4_TIME" (i.e.,
3261           timestruc_t).  This is necessary to work around HP/UX...  Thanks
3262           to Byron Rigg <bryon_rigg@mail.telecorpsys.com> for suggesting
3263           this.
3265         * ace/config-hpux-10.x.h: config-hpux.h has now been renamed to
3266           config-hpux-10.x.h and config-hpux-9.x.h.  Thanks to Byron Rigg
3267           <bryon_rigg@mail.telecorpsys.com> for suggesting this.
3269         * ace/Synch_T: Added a new method called ts_get() and made both
3270           the operator-> and operator TYPE * call this.  I hope this will
3271           fix a bug with HP/UX reported by Neil Cohen...
3273         * ace/OS.i (dlclose): Added Win32 support for dlclose().  Thanks
3274           to Todd L. Montgomery <tmont@cerc.wvu.edu> for pointing the way
3275           here...
3277         * ace: Split off the old class ACE_Dynamically_Allocated, renamed
3278           it ACE_Dynamic, put it in a separate file called Dynamic.*.
3279           This is necessary to solve nasty multiple definition problems
3280           with compilers that require the source of template.
3282         * ace/Synch_T: moved
3284           template <class TYPE> TYPE *
3285           ACE_TSS<TYPE>::make_TSS_TYPE (void) const
3286           {
3287             return new TYPE;
3288           }
3290           out from condition compilation block
3292           #if (defined (ACE_HAS_THREADS) && defined(ACE_HAS_THREAD_SPECIFIC_STORAGE))
3294           in file Synch_T.cpp.  This class member called in many other
3295           places regardless ACE_HAS_THREADS and
3296           ACE_HAS_THREAD_SPECIFIC_STORAGE defined or not...
3298         * ace/Name_Handler.cpp: Changed the use of the "inherited" typedef
3299           to fully expand to ACE_Svc_Handler<ACE_SOCK_STREAM,
3300           ACE_NULL_SYNCH>.  This is necessary to workaround bugs with AIX.
3301           Thanks to Chris Lahey for reporting this.
3303         * tests and apps: Fixed an odd problem that only surfaced recently
3304           with GNU G++.  Apparently, it doesn't like function-style casts
3305           of the form ACE_SignalHandler (foo), but will accept
3306           (ACE_SignalHandler) foo.  Since both approaches are equally good
3307           for what I'm doing, I've updated all the code in ACE to be more
3308           portable.
3310 Sun Jan 28 12:24:58 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3312         * tests/Shared_Malloc/test_malloc.cpp (spawn):  when forming
3313           argv[] for execv, moved 
3315           argv[ ... ] =  Options::instance ()->debug () ? "-d" : "";
3317           to the end of the vector just before terminator.  This will
3318           allow to pass rest of arguments to exec if -d switch not
3319           specified.  Thanks to Alexandre Karev <akg@na47sun05.cern.ch>
3320           for reporting this.
3322         * tests/Shared_Malloc/Malloc.cpp: To avoid conflict with
3323           ACE_DEFAULT_SEM_KEY in OS.h changed SEMA_KEY value in
3324           tests/Shared_Malloc/Malloc.cpp to ACE_DEFAULT_SEM_KEY + 1.
3325           Thanks to Alexandre Karev <akg@na47sun05.cern.ch> for reporting
3326           this.
3328         * ace/SV_Semaphore_Complex.i: Changed all arguments in calls like 
3329         
3330                 this->acquire( n+2 )
3331           and
3332                 this->tryacquire( n+2 )
3333           to
3334                 this->acquire( n )
3335           and
3336                 this->tryacquire( n )
3337         .
3338           Since the semaphore number is incremented by 2 in
3339                 SV_Semaphore_Complex::acquire
3340           and
3341                 SV_Semaphore_Complex::tryacquire
3343           when SV_Semaphore_Simple::(acquire/tryacquire) is called.
3344           Thanks to Alexandre Karev <akg@na47sun05.cern.ch> for pointing
3345           this out.
3347 Sat Jan 27 16:14:27 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3349         * ace/Read_Buffer: Added a new component that efficiently reads in
3350           an artibrarily large buffer from a file up to an including a
3351           termination character.  Also performs search/replace on single
3352           occurrences a character in the buffer using the priniciples of
3353           Integrated Layer Processing.
3355 Fri Jan 26 12:01:06 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3357         * ace/Thread_Manager: Made a small change to workaround the use of
3358           a struct type for thread_t and hthread_t in HP/UX.  Thanks to
3359           Bryon Rigg <bryon_rigg@mail.telecorpsys.com> for noticing this.
3361 Thu Jan 25 19:54:01 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3363         * ace/Svc_Handler: Added some minor changes to account for
3364           limitations with GNU G++.  I think the new implementation will
3365           be portable across all C++ platforms.
3367         * ace/SV_Semaphore_*: Widened the interface of SV_Semaphore*
3368           classes to include a flags parameter.  This can be used to pass
3369           in SEM_UNDO, which is important in many applications.  Thanks to
3370           Andrew Gilbert <agilbert@csci.csc.com> for suggesting this.
3372         * ace/Synch_T.cpp: We are forced to "cast away const" inside of of
3373           the ACE_TSS const methods in order to make the ACE_Guard work.
3374           The right thing to do would be to make the lock "mutable" but
3375           that's hopelessly non-portable.
3377 Thu Jan 25 14:34:12 1996  Douglas C. Schmidt  (schmidt@merengue.cs.wustl.edu)
3379         * ace/Log_Msg: Fixed a minor bug in ACE_Log_Msg that kept
3380           resetting the restart and iostream value no matter what we'd set
3381           it to before.  Thanks to Prashant for finding this.
3383         * bin: Fixed up the Makefile process for the clone program.  Now
3384           it builds without having to depend on ACE.  Thanks to Brad Brown
3385           (bbrown@rdxsunhost.aud.alcatel.com) for suggesting this.
3387         * ace/Synch: Modified ACE_Condition*.remove so that cond_destroy()
3388           is called in a loop if the condition variable is BUSY.  This
3389           avoids a condition where a condition is signaled and because of
3390           some timing problem, the thread that is to be signaled has
3391           called the cond_wait routine after the signal call.  Since the
3392           condition signal is not queued in any way, deadlock occurs
3393           unless this loop is used.  Thanks to Chris Lahey for pointing
3394           this out.
3396         * ace/CORBA_Handler: Made all the methods in ACE_CORBA_Handler
3397           private to make sure that users don't inherit from this class!
3398           Instead, the ACE_MT_CORBA_HAndler and ACE_ST_CORBA_Handler
3399           should be used as Singletons.
3401         * ace/CORBA_Handler: Added new support for Orbix on Windows
3402           NT.  This requires clever use of macros in order to handle
3403           inherent differences between generated code. 
3405         * ace/Svc_Handler: Added a clever idiom that transparently checks
3406           if we were allocated dynamically.  This information is used by
3407           the <destroy> method to decide if we need to delete <this>...
3408           The idiom is based on a paper by Michael van Rooyen
3409           (mrooyen@cellnet.co.uk) that appeared in the April '96 issue of
3410           the C++ Report.  We've spruced it up to work correctly in
3411           multi-threaded programs by using our ACE_TSS class.
3413         * ace/config-win32-msvc4.0.h (ACE_LACKS_RECVMSG): Fixed a typo
3414           in the MSVC++ config files.
3416 Thu Jan 25 02:59:22 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3418         * Finally got the frigging library built on SGI.  This was a chore
3419           due to compiler bugs, but at least it's another datapoint for
3420           successful cross-platform building...
3422 Wed Jan 24 00:10:29 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3424         * ace/Time_Value.cpp (operator-=): Changed operator += and
3425           operator -= to use const ACE_Time_Value & rather than
3426           ACE_Time_Value &.  Thanks to Alex V Maclinvosky for noticing
3427           this.  In addition, also changed *all* ACE_Time_Value parameters
3428           to be const ACE_Time_Value &.  This should reduce the number of
3429           excess constructors called...
3431         * ace/OS: Added Chris Lahey's latest changes that introduce POSIX
3432           pthread cancellation cleanup handlers.  Also added an herror()
3433           function that is comparable to perror().
3435         * ace/OS: (thr_join): Added a new version of thr_join() which
3436           works for Windows NT.  Windows NT requires a HANDLE, which is
3437           fundamentally incompatible with other things...
3439         * ace/Thread_Manager: added two new methods that return the
3440           ACE_Thread_Descriptor corresponding to either a thr_id or a
3441           thr_handle.
3443         * ace/Thread_Manager: Made the spawn() interface compatible with
3444           the other spawn() interfaces in ACE_OS and ACE_Thread by adding
3445           the hthread_t type.
3447         * ace/Log_Msg.cpp (log): Fixed things up so that we can now print
3448           out the thread id for all versions of threads!
3450         * ace/OS: Added a new overloaded version of ACE_OS::thr_self()
3451           that returns the "kernel" thread id.  This is necessary on
3452           systems like NT and AIX, which separate kernel thread ids from
3453           user thread ids.  Thanks to Chris Lahey for suggesting this.
3455 Tue Jan 23 01:17:23 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3457         * ace/OS.i (sigwait): Changed the parameter of sigwait() from
3458           const sigset * to sigset *.  Thanks to Neil Cohen for chasing
3459           this down on SunOS 5.5....
3461         * ace/Malloc_T.cpp: Fixed a typo in bind() whereby 
3462           the test if (duplicates == 0 || this->shared_find (name) != 0)
3463           should be if (duplicates == 0 && this->shared_find (name) != 0).
3464           Thanks to the ever vigilant Alexandre Karev
3465           <akg@na47sun05.cern.ch> for reporting this.
3467         * tests: Fixed all test programs that previously used the "execl"
3468           family of system calls to use the "execv" family instead.
3470         * ace/OS: Added support for the "execv" family of exec() system
3471           calls.  Unlike the "execl" family, these calls are easy to
3472           support since they don't require variadic arguments.  I've added
3473           the hooks for the "execl" family, as well, but haven't actually
3474           implemented them yet.
3476         * ace/Memory_Pool.cpp (ACE_Shared_Memory_Pool): Fixed a bug that
3477           was tickled when pool_name == 0.  Thanks to Alexandre Karev
3478           <akg@na47sun05.cern.ch> for reporting this.
3480         * ace/OS.h: removed FD_SETSIZE from the ACE_WIN32 stuff since this
3481           is defined in winsock.h.
3483         * ace/OS.cpp (ACE_Spawn_Args): Added "f" to the parameter list.
3485         * ace/CORBA_Handler: Added a new macro called CORBA_T that masks
3486           the incompatibilities between the version of Orbix on NT and on
3487           Solaris.  
3489         * ace/OS.h: Added support for compilers (like NT) that don't
3490           support "mode masks" (these are used to give symbolic names for
3491           file creation modes passed to open() and creat().
3493         * ace/SString.cpp: Added Tim's new copy constructor code for
3494           SString.cpp.  This doesn't appear to be strictly necessary , but
3495           it is more explicit and therefore it useful.
3497         * ace/Map_Manager.cpp: Fixed a bug in Map_Manager that was failing
3498           to call the placement new operator for every element in the map
3499           that was dynamically created by the allocator().
3501         * ace/Synch_T: Added Tim's new ACE_TSS implementation.  This
3502           version is more flexible than the old one.
3504 Mon Jan 22 00:03:24 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3506         * ace/Time_Value.h: changed a few minor things to get this
3507           compiling again on NT.  Thanks to Irfan for helping with this.
3509         * ace/Synch_Options: Changed all the "accessor" methods to be
3510           const member functions at the request of Irfan.  I just know
3511           this is going to cause const cancer... ;-)
3513         * ace/Acceptor and Connector: Changed all parameters that take
3514           ACE_Synch_Options & to take const ACE_Synch_Options & at the
3515           request of Irfan.
3517         * ace/OS.i (uname): Added rudimentary support for the uname()
3518           function for Windows NT.  If anyone has suggestions on how to
3519           fill in all these fields portably please let me know!
3521         * ace/Connector.h: Changed a stray -1 to ACE_INVALID_HANDLE.
3522           Thanks to Irfan for noticing this.
3524         * ace/Profile_Timer.h: Added the keyword "public" to handle one
3525           arm of the conditional compilation that is only exercised on
3526           NT...  Thanks to Irfan for noticing this.
3528         * ace/OS.i (mutex_init): Removed the call to
3529           pthread_mutexattr_setkind_np() it isn't in the final POSIX
3530           standard.
3532         * ace/Reactor.cpp (unbind): Removed the ACE_MAX3 template function
3533           from OS.h and inlined its only use in the Reactor.  This was
3534           causing problems with some C++ compilers.  Thanks to Mark Zusman
3535           <marklz@topaz.technion.ac.il> for reporting this.
3537         * ace/OS.i: Fixed a number of omitted return results in
3538           gettimeofday() and ctime_r() that were masked by the
3539           ACE_OSCALL_RETURN macros.  Thanks to Mark Zusman
3540           <marklz@topaz.technion.ac.il> for reporting these.
3542         * ace/config-linux.h: Added new symbolic constants to handle the
3543           fact that Linux seems to lack recvmsg(), sendmsg(), msync(), and
3544           madvise().  Thanks to Neil Cohen for noticing this.
3546         * include/makeinclude: Fixed all the *-orbix.GNU files to use
3547           $(ORBIX_ROOT)/lib rather than $(ORBIX_ROOT)/ace.  Thanks to
3548           Pramod Kumar Singh <pramod@saturn.miel.mot.com> for reporting
3549           this.
3551         * ace/config*.h: Changed all typos of the form ACE_HAS_SVSV_IPC to
3552           ACE_HAS_SYSV_IPC.  Thanks to Alexandre Karev
3553           <akg@na47sun05.cern.ch> for reporting this!
3555         * ace/OS: Changed the order of parameters passed to thr_create()
3556           to be consistent with all the spawn() and spawn_n() usages in
3557           ACE.  Thanks to Chris Lahey for pointing this out.
3559 Sun Jan 21 15:06:15 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3561         * ace: Added a new "priority" parameter to the spawn() and
3562           spawn_n() methods in ACE_Thread and ACE_Thread_Manager.  This
3563           allows us to pass the priority on down to thr_create().  Thanks
3564           to Chris Lahey for pointing this out.  Note that this change
3565           required reordering the parameters so that the stack and
3566           stack_size parameters now come last for these methods.  Since
3567           those are not likely to change much this is a good place to put
3568           them (i.e., at the end).
3570         * ace/Thread.i (spawn_n): Added a new overloaded spawn_n() method
3571           that accepts an array of thread_t's to be filled in.  This is
3572           useful if you want to know the thread IDs of any threads
3573           created.
3575         * Changed ACE_OS::signal() to ACE_Sig_Action across all of ACE to
3576           be portable to pthreads implementations.  Thanks to Chris Lahey
3577           for pointing this out.
3579         * ace/OS: Added a new set of OS C++ wrappers for POSIX pthread
3580           cancellation routines.  Thanks to Chris Lahey for these.
3582         * ace/Thread: Added a new set of ACE C++ wrappers for POSIX
3583           pthread cancellation routines.  Thanks to Chris Lahey for
3584           these.
3586         * ace/Map_Manager: Revised the Map_Manager::bind method.  This has
3587           now been split into bind() and rebind() methods.  The bind()
3588           method is very simple -- if you try to bind() to something that
3589           already exists you fail.  The rebind() method allows you to
3590           atomically update existing values in a map.  It also gives you
3591           back the existing values so that you can delete them if
3592           necessary.  The Local_Name_Space::bind() and rebind() methods
3593           have been updated to use this new interface.
3595         * ace/Malloc_T.cpp (find): Fixed a typo -- find() should have set
3596           its pointer parameter to node->pointer_, rather than
3597           node->name_!  This bug was revealed during testing of the ACE
3598           Name Server.
3600         * ace/Local_Name_Space.cpp: Fixed bugs with computation of the
3601           size of ACE_NS_Strings -- they needed to count the wchar_t's
3602           correctly, along with several other minor fixes.  These were
3603           revealed during testing of the ACE Name Server.
3605         * ace/SString.cpp: Fixed several bugs that prevented the
3606           assignment operators from working correctly.  These were
3607           revealed during testing of the ACE Name Server.
3609 Sat Jan 20 08:33:54 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3611         * ace/Local_Name_Space.cpp (shared_bind): The args to to the
3612           NS_String constructors were not in the correct order:
3614           wchar_t *value_rep = (wchar_t *) (ptr);
3615           wchar_t *name_rep = (wchar_t *) (ptr + name_len);
3616           ACE_NS_String ext_id (name.fast_rep (), name_rep, name_len);
3617           ACE_NS_String int_id (value.fast_rep (), value_rep, value_len);
3619           They should be:
3621           ACE_NS_String ext_id (name_rep, name.fast_rep (), name_len);
3622           ACE_NS_String int_id (value_rep, value.fast_rep (), value_len);
3624           Thanks to Irfan for noticing this.
3626         * ace/OS.h: defined the following in ACE_OS:
3628           #define MS_ASYNC 0    
3629           #define MS_SYNC 0    
3630           #define MS_INVALIDATE 0    
3632           under NT so that calls to mmap will port transparently.  Thanks
3633           to Irfan for suggesting this.
3635 Thu Jan 18 16:25:16 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3637         * ace: Added a new symbol that indicates if the platform supports
3638           the new BSD sin_len field of inet_addr.
3640         * ace/OS: added new support for AIX gethostbyaddr_r(),
3641           gethostbyname_r(), and getservbyname_r().  This fixes some
3642           problems caused by improper choice of buffer size.  Also changed
3643           the INET_Addr.cpp file to use these new changes.  Thanks to
3644           Chris Lahey for recommending these changes.
3646 Wed Jan 17 01:10:48 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3648         * ace/OS.i (printf): the ACE_OS::printf() function did not work.
3649           Needed to call vprintf() internally, not printf.  Thanks to
3650           Chris Lahey for pointing this out.
3652         * Released version 4.0.  
3654         * include/makeinclude: added the -lgen library to all the
3655           platform_sunos5.*.GNU files.
3657         * ace/Memory_Pool.cpp: removed the INLINE macros in Memory_Pool.cpp.
3658           Thanks to Alexandre Karev (karev@vxcern.cern.ch) for noticing
3659           this!
3661         * ace/Malloc_T.cpp: moved the comment "Ce n'est pas une catst"
3662           outside of the macro ACE_NEW_RETURN.  The prepocessor truncates
3663           the macro expansion when it encounters the comment.  Thanks to
3664           Greg Baker <GBaker@p01.az15m.iac.honeywell.com> for pointing
3665           this out.
3667         * ace/Reactor.cpp (close): added "return 0" at the end of the
3668           close member function.  The function is prototyped to return an
3669           int and the compiler expects a return outside of the if clause.
3670           Thanks to Greg Baker <GBaker@p01.az15m.iac.honeywell.com> for
3671           pointing this out.
3673         * ace/Stack.cpp (free_all_nodes): Removed a spurious ACE_OS that
3674           was stuck on the front of ::delete.  Thanks to Greg Baker
3675           <GBaker@p01.az15m.iac.honeywell.com> for pointing this out.
3677         * ace/OS.i: Added extern "C" to the prototype for syscall in OS.i.
3678           Without it, you get unresolved symbols at link time.  Thanks to
3679           Greg Baker <GBaker@p01.az15m.iac.honeywell.com> for pointing
3680           this out.
3682         * ace/Message_Queue.cpp: Changed the return values for
3683           enqueue_head(), enqueue_tail(), dequeue_head(), and
3684           peek_dequeue_head() to return the number of messages that are
3685           still on the queue.  This helps some algorithms perform better
3686           and avoid blocking unnecessarily.  Thanks to Alex V Maclinvosky
3687           <alexm@teltrunk1.tait.co.nz> for suggesting this...
3689         * ace/Synch_T.cpp (ACE_Condition): Fixed a bug in
3690           ~ACE_Recursive_Lock and ~ACE_Recursive_Mutex that was causing
3691           the destructor to be called twice (once implicitly and once
3692           explicitly).  Thanks to Chris Lahey for pointing this out.
3694 Mon Jan 15 12:44:29 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3696         * ace: Created a new config symbol called ACE_HAS_ALLOCA_H.  This
3697           is required to differentiate between AIX and other versions of
3698           UNIX.  Thanks to Chris Lahey for pointing this out.
3700         * ace: moved config-hpux.h to config-hpux-9.x.h in anticipation of
3701           the changes required to handle HP/UX 10.0!
3703 Sun Jan 14 23:38:23 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3705         * ace/OS.h (ACE_MAX3): Fixed the definition of ACE_MAX3 (it needed
3706           a return value of template type T).  Thanks to Mark Zusman
3707           <marklz@topaz.technion.ac.il> for noticing this.
3709         * ace: Added a new section to all the template files called
3710           ACE_TEMPLATES_REQUIRE_SPECIALIZATION to deal with the screwy GNU
3711           G++ semantics that are required if you *don't* have the template
3712           repository patches.  Thanks to Mark Zusman
3713           <marklz@topaz.technion.ac.il> for this.
3715 Fri Jan 12 00:47:57 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3717         * ace/Time_Value.h: #included <pthreads.h> to the Time_Value.h
3718           class so that it would be the first file included.  This fixes a
3719           problem with AIX.  Thanks to Chris Lahey for reporting this and
3720           suggesting the fix.
3722         * ace: Fixed a braino with the #ifdefs in SPIPE_Stream and
3723           SPIPE_Acceptor.  These were checking for ACE_WIN32 rather than
3724           ACE_HAS_STREAM_PIPES.  Naturally, that failed on versions of
3725           UNIX (e.g., Linux) that lack STREAM pipes!  Thanks to Neil Cohen
3726           for taking time out of fighting blizzards to report this!
3728         * ace/Svc_Handler: Added a new method for handle_timeout, which
3729           shuts things down by default.  Thanks to Irfan for suggesting
3730           this.
3732         * Fixed a minor problem caused when Tim added the Double-Check
3733           pattern to ACE_ODB...
3735 Thu Jan 11 01:48:02 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3737         * Integrated AIX fixes from Chris Lahey <clahey@ix.netcom.com>.
3738           These should allow ACE to build correctly using the AIX compiler
3739           and it's screwy template mechanisms!
3741         * ace: Fixed some minor bugs that caused problems when compiling
3742           with G++.
3744 Wed Jan 10 00:17:05 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3746         * ace/Trace.cpp: Fixed a typo that was causing problems when using
3747           ACE_TRACE (we were ending up with recursive tracing in the
3748           ACE_Trace class!).  Thanks to Detlef for noticing this.
3750         * ace/ACE.cpp: Moved methods from ACE.i to ACE.cpp and removed the
3751           INLINE macro to deal with order of include problems with GNU
3752           G++.
3754 Tue Jan  9 19:00:41 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3756         * ace/Task.i (flush): Added a check to make sure that msg_queue_
3757           != 0 before trying to close() the queue.  This solves a problem
3758           if the queue has already been closed.  Thanks to Alex V
3759           Maclinvosky <alexm@teltrunk1.tait.co.nz> for reporting this...
3761         * tests/ASX/Event_Server/Event_Server: Fixed minor bugs in
3762           Supplier_Router.cpp and Consumer_Router.cpp -- I was checking
3763           for this->getq (mb) > 0 rather than this->getq (mb) >= 0.
3764           Thanks to Alex V Maclinvosky <alexm@teltrunk1.tait.co.nz> for
3765           noticing this...
3767         * ace/Synch_T.h: Commented out the ACE_ALLOC_HOOK stuff.  This is
3768           causing order-of-include problems on HP/UX.  Also moved the
3769           ACE_Null_Condition::wait() method to Synch_T.i to avoid the same
3770           problem.  Thanks to Greg Baker
3771           <GBaker@p01.az15m.iac.honeywell.com> for pointing this out.
3773 Sun Jan  7 18:57:49 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3775         * ace/Makefile: Added the Dump file to ACE.  Thanks to Tim for
3776           fixing this up to make it ready for prime time.
3778         * Thanks to Craig Rodrigues <rodrigc@ecf.toronto.edu> for sending
3779           me a new version of psnup that *finally* fixes the nasty
3780           problems with "4-up" printing of postscript!  This makes it much
3781           easier to distribute ACE documentation...
3783 Sun Jan  7 18:31:07 1996  Tim H. Harrison  (harrison@merengue.cs.wustl.edu)
3785         * ace: Used the "Double-Check" pattern to eliminate potential race
3786           conditions when using Singletons in multi-threaded programs.
3787           Classes affected included ACE_[MS]T_CORBA_Handler, Name_Options,
3788           Trace, and ACE_ODB.
3790 Fri Jan  5 00:03:29 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3792         * ace/OS.i: Added the following to OS.i:
3794           #if defined (ACE_LACKS_SYSCALL)
3795           int syscall (int, ACE_HANDLE, struct rusage *);
3796           #endif /* ACE_LACKS_SYSCALL */
3798           This should fix some problems with HP/UX.  Thanks to Walt Akers
3799           (akers@cebaf.gov) for pointing out the problem.
3801         * ace/Handle_Set: Fixed the Handle_Set conversion operator so that
3802           it returns fd_set * rather than ACE_FD_SET_TYPE *.  Thanks to
3803           Walt Akers (akers@cebaf.gov) for pointing out the problem.
3805         * ace/Time_Value.h: I think I've fixed the problem with the order
3806           of #includes with respect to POSIX and SVR4 time.  The trick was
3807           to put this test in ace/Time_Value.h and then to make sure that
3808           the ace/config.h file was included at this point!  Also changed
3809           the symbol from ACE_HAS_POSIX_TIMERS to ACE_HAS_POSIX_TIME to be
3810           more accurate.
3812 Thu Jan  4 23:16:59 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3814         * ace/OS.i (gettimeofday): Changed the implementation of
3815           gettimeofday() to use the ::_ftime call rather than the more
3816           complex ::GetSystemTime(), ::SystemTimeToFileTime() duo.
3818 Thu Jan  4 9:32:38 1996   Chris Lahey (clahey@ix.netcom.com)
3820        * ace/config-aix.h: added #define ACE_TEMPLATES_REQUIRE_SOURCE 
3821          to make ACE work with AIX C++ compiler.
3823        * include/makeinclude/platform_aix.GNU:
3825          Added -qtempinc to the CPPFLAGS
3826          Removed the PIC= definition completely
3828        * ace/Task.h: ACE_Task::svc() should not be declared as a pure
3829          virtual, removed = 0.
3831        * ace/Map_Manager.cpp: in trybind() member function, the line
3832            int_id = ss.int_id_;
3833          should be:
3834            int_id = search_structure[index].int_id_;
3836 Thu Jan  4 01:23:38 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3838         * ace/Map_Manager.cpp: Fixed a braino in Map_Manager -- didn't
3839           need the <index> parameter to shared_bind().  Thanks to Tim for
3840           finding this!
3842         * ace/Log_Msg.cpp (instance): Tim Harrison did a noble service to
3843           humanity by fixing a potential race condition in the instance()
3844           Singleton of ACE_Log_Msg.
3846 Wed Jan  3 00:49:57 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3848         * ace: Made some minor changes to fix portability problems with
3849           SGI.  Fortunately, this should also fix some other problems with
3850           HP/UX another other non-thread platforms.
3852         * ace/ACE.cpp (format_hexdump): Added Todd Montgomery's amazing
3853           "format_hexdump" method to class ACE.
3855 Tue Jan  2 20:47:57 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3857         * ace/SV_Semaphore*: updated the interface of the _Simple and
3858           _Complex System V semaphore wrappers to include the _read() and
3859           _write() forms of acquire() and tryacquire().  Note that I've
3860           implemented these as calls to acquire() and tryacquire(), so
3861           they don't add any extra behavior.  This is needed for interface
3862           conformance with other forms of ACE synchronization mechanisms.
3864         * ace/Time_Value.h: Changed the header to #include <sys/time.h>
3865           in order to work around nasty "order of include" problems.
3867         * tests: Created a new directory called Win32.  This contains test
3868           programs that This directory contains test programs that have
3869           been compiled and tested successfully under Windows NT.  As we
3870           get further along, we'll move this stuff into the general ACE
3871           $WRAPPER_ROOT/tests directory (since of course all ACE programs
3872           will run without any problems under Win32, right?  ;-)).  See
3873           the ./tests/Win32/README file for instructions on how to build
3874           these tests.
3876         * ace/Reactor.h: Moved the ACE_Handler_Repository out of the
3877           ACE_MT_SAFE section of the code.  This was a "typo."  Thanks to
3878           Walt Akers <akers@cebaf.gov> for reporting this.
3880 Mon Jan  1 01:18:12 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
3882         * ace/ACE.i: Moved the recv_n() and send_n() methods from ACE.cpp
3883           into ACE.i and set things so that if __INLINE__ is set then
3884           we'll inline those too!
3886         * ace: Irfan and I got the first major part of the Win32 to work
3887           finally!  We made two socket programs (client and server) that
3888           talked to each other and to UNIX.  Things are really starting to
3889           take shape!