Sun Dec 31 01:02:01 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * ace/OS (mmap): Added a new parameter to the argument list for mmap(). This parameter is an ACE_HANDLE * and is used in the Win32 implementation, which requires CreateFileMapping to open a new HANDLE. This handle is passed back to the caller, which is then responsible for freeing it... I'll probably need to modify the ACE_Mem_Map class to manage this new handle for the WIN32 version. * ace: Updated all the SPIPE files in preparation to porting them to Windows NT, where they will be implemented using Win32 Named Pipes! * ace/Typed_SV_Message: Fixed a mysterious braino where the method definitions for Typed_SV_Message were actually within Typed_SV_Message_Queue.cpp. I'm not sure why this happened, but it's clearly been this way for eons... Also, changed the name of the method "max" to "max_size" to avoid conflicts with macros on Windows NT... * ace: Added a new config symbol: ACE_HAS_SYSV_IPC. If this is *not* set (e.g., Win32) then don't try to compile any of the System V IPC mechanisms (e.g., shared memory, message queues, semaphores). * ace/Malloc: Reimplemented the Malloc-family to factor out common code. Also added a new method called "trybind" which atomically tries to bind a new void *pointer to a char *name. If there is no name with the same value, the bind succeeds. Otherwise, the bind "fails", but returns the existing pointer. * ace/Map_Manager: Reimplemented the Map_Manager to factor out common code. Also added a new method called "trybind" which atomically tries to bind a new int_id to an ext_id. If there is no ext_id with the same name, the bind succeeds. Otherwise, the bind "fails", but returns the existing int_id. * ace/Memory_Pool.cpp: Commented out all the diagnostic messages in the various ACE_*_Memory_Pools. Now that we're actually using this within ACE, they were distracting. * ace/CORBA_Handler.cpp (ACE_ST_CORBA_Handler): Gave iterations_ an initial value of "5" for backwards compatibility. Thanks to Irfan for doing this. * ace/Map_Manager.cpp (ACE_Map_Manager): Fixed some more braino in the constructors of Map_Manager. During the recent changes I'd forgotten to initialize the Map_Manager's instance variables to 0. Thanks to Irfan for finding this out the hard way... ;-) * ace/OS.i (gettimeofday): Added a WIN32 implementation of gettimeofday. This is pretty nasty, but it should centralize all of this processing in one place in ACE! Sat Dec 30 00:50:20 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * ace/Timer_Queue: Removed the current_time() method from the Timer_Queue class. All uses will be replaced with calls to ACE_OS::gettimeofday(). Not only does this factor out more code, but it is also reentrant! * ace/ACE.cpp (handle_timed_accept): Consolidated code so that select() is always used, rather than poll(). * ace: Generalized the ACE file locking wrappers (both at the Synch-level and the ACE_OS class level) to enable them to lock arbitrary regions (aka "records") of a file. Before, they could only lock the entire file (which remains the default behavior). This new behavior works for both NT and UNIX. * ace/Synch: Removed the definition and use of the ACE_SYNCH_ERROR_RETURN macro from all the ACE Synch* methods. This behavior has been integrated into the ACE_OS class instead since it cleans up lots of code that would otherwise have been hard to write. * ace/INET_Addr.cpp (get_host_name): Fixed a bug that arose by trying to use the reentrant version of gethostbyaddr all the time. In order to fix this, I've added a new get_host_name() method that allows the caller to supply a buffer for the hostname. * ace: Cleaned up all the POSIX_TIMER junk that permeated ACE. Now all platforms will have the POSIX timer structures (e.g., timestruc_t and timespec), though only those that actually support nano-second timing will be able to do anything useful with this... As part of this cleanup, the poll, select, and cond_timedwait method in ACE_OS now take ACE_Time_Value * rather than int, timeval *, and timestruc_t, respectively. This *greatly* cleans up the clutter throughout the rest of ACE. * ace/ACE: Added two new methods called tv2msec and msec2tv that converts ACE_Time_Value format into millisecond format and vice versa. This will make it easier to port code between NT and UNIX. * ace/Reactor: Removed the code in the Reactor that previously allowed it to be resized after it had been initialized. This code no longer was used due to the recent enhancements that ensure the Reactor is only initialized once per-process. * ace/Reactor: Modified the Reactor so that it now compiles on NT. It doesn't work yet, but at least it compiles! * ace/Reactor: Moved the "max3" method from the Reactor to OS.h, where it has become a template function usable throughout ACE. * ace/OS.cpp: Added extern "C" before the NT implementations of readv() and writev(). * ace/OS.i: Fixed the declaration of ::readv() and ::writev() for cases where the OS doesn't provide them natively. * ace/Event_Handler: Modified handle_signal() to take an int rather than an ACE_HANDLE. The old way broke under NT... * ace: Made lots of minor changes to resolve signed int vs. unsigned int mismatches. Thanks to the MSVC++ 4.0 compiler for pointing these out. At least it's good for something... ;-). Fri Dec 29 15:01:10 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * ace/ACE.cpp (handle_timed_accept): Reimplemented the core select() loop to make the code portable to Win32. * ace/Map_Manager.cpp (ACE_Map_Manager): Fixed a minor bug caused by recent changes (forgot to initialize max_size_ in the constructor...). * Updated all the manual pages to reflect the latest changes. * ace/ACE.cpp: Fixed up the ACE class so that all of the methods should compile on both Windows NT and UNIX! * ace/OS: Moved the get_file_size() method from class ACE and put it into class ACE_OS, where it's been renamed to filesize(). This is really more of an "OS" function, e.g., it's supported on Win32 directly. * ace/OS.cpp: added readv() and writev() implementations for those platforms (e.g., Windows NT) that require them. * ace/Makefile: Added a new regex to the Svc_Conf_l.cpp target that will substitute for . This should solve a portability problem with Windows NT... * ace/Malloc: Modified the sync() and protect() methods to use void * rather than char *. This is now consistent with the OS classes. * ace/OS: Changed things so that all the mmap() related OS wrappers use void * in their external interface. Any discrepancies between platforms are now dealt with internally, in the implementation of the methods. Thanks to Chris Lahey (clahey@ix.netcom.com) for suggesting this. * ace/Local_Name_Space: Modified how ACE_NS_String is used to instantiate ACE_Map_Manager in order to work around problems with AIX C++. Thanks to Chris Lahey (clahey@ix.netcom.com) for reporting this. * ace/Synch.i: Added a definition for ACE_RW_Mutex::acquire(). Fri Dec 29 00:34:16 1995 Chris Lahey (clahey@ix.netcom.com) * ace/OS.h: Changed the #ifdef for ACE_HAS_COMPLEX_LOCKS to ACE_HAS_COMPLEX_LOCK. Changed prototypes for ACE_OS:mprotect(), msync(), and munmap() to accept ACE_MMAP_TYPE for their first arg. The AIX versions of these calls all expect void * for their pointer variable. Note that madvise() takes a caddr_t for its 1st arg and therefore does not need to be altered. (See related changes in OS.i and Mem_Map.i) Changed prototype for ACE_OS::getsockname(), arg3 to int * (See related change in OS.i) Changed prototype for ACE_OS::setsockopt(), arg4 to const char * and arg 5 to int (See related change in OS.i) * ace/OS.i: Changed function definition for ACE_OS::mprotect(), msync(), and munmap() to accept ACE_MMAP_TYPE as their 1st arg. The following changes relate to the inconsistencies in the sockets calls on AIX. I thought it would make more sense to leave the public interfaces alone and then handle the differences internally. That way it won't break any exisiting code. Changed function definition for ACE_OS::getsockname() to accept arg3 as int *. Made similar changes in ACE_OS::setsockopt() - change definition to accept const char * for arg4 and int for arg5. Add the following code at the start of the function: Also made changes to ACE_OS::recvfrom() - change arg 6 back so it is int *. * ace/Mem_Map.i: In ACE_Mem_Map::advise(), cast 1st arg to ACE_OS:madvise() to (caddr_t). * ace/Memory_Pool.cpp: In ACE_MMAP_Memory_Pool::acquire(), make cast to char * in the return statement. In ACE_MMAP_Memory_Pool::handle_signal(), also make same cast in the ACE_DEBUG statement near the top of the function. * ace/Reactor.cpp and ace/Reactor.h: ACE_Reactor::handler_i() doesn't return properly if *eh != 0. Remove last "else" so function always returns 0 if handler != 0. In ACE_Reactor::owner(), we need to change signature since thread_t is not an integer. This has been changed to int ACE_Reactor::owner(thread_t *t_id); The last two lines have been changed to: *t_id = this->owner_; return 0; * ace/Synch.cpp: In ACE_Condition_Mutex::wait(), the call to cond_timedwait() does not exist, but ACE_OS::cond_timedwait() does exist. It takes the same arguments. * ace/Synch.h and ace/Synch_T.h: At the end of both files, before the #define INLINE check for this define's existence to avoid causing compilers to choke. * ace/Mem_Map.i: In ACE_Mem_Map::operator(), the return statement looked very odd. In the assignment to addr, why is the ", 0" in the statement? Fri Dec 29 00:34:16 1995 Douglas C. Schmidt (schmidt@lambada.cs.wustl.edu) * ace: Fixed up many minor problems with the various types of Shared_Memory wrappers. This mostly entailed changing from char * to void * to be more consistent with the other parts of ACE. In addition, I now only include the *.i files if __INLINE__ is enabled. * ace/Memory_Pool.cpp (map_file): Fixed a minor bug by enabling MAP_FIXED if we're trying to map a file using a fixed address. Thu Dec 28 18:39:16 1995 Douglas C. Schmidt (schmidt@merengue.cs.wustl.edu) * ace/Local_Name_Space.cpp: Finished implementing changes to the ACE_Malloc stuff and the Local_Name_Space that Irfan had begun last semester. * ace/SString.cpp: Added new optimizations to the assignment operators of the ACE_[WCS]String classes to avoid freeing/allocating memory if the current size is large enough. * ace/SString: Added copy constructors... * ace/Local_Name_Space.cpp: Modified the implementation of bind() to avoid a race condition. * ace/Map_Manager.cpp (bind): Changed the semantics of bind() so that callers can control whether or not INT_IDs are reassigned. Also changed things so that callers can get back the existing value if they choose not to reassign. * ace/SString.cpp: Removed the "P" (persistent) versions of all these classes and merged them into the default versions. The persistence is now determined by the type of allocator passed in as a parameter to the constructor (or by using the "default" allocator that is accessible via ACE_Service_Config::allocator()). * ace/Map_Manager.cpp: Removed the "P" (persistent) versions of all these classes and merged them into the default versions. The persistence is now determined by the type of allocator passed in as a parameter to the constructor (or by using the "default" allocator that is accessible via ACE_Service_Config::allocator()). * ace/Malloc_T: Modified the bind() algorithm so that it will allow the caller to determine whether duplicates are allowed or not... Also changed things so that callers can get back the existing value if they choose not to allow duplicates. Irfan questions the sanity of this... ;-) * ace/Synch: To be consistent, added acquire_write and acquire_read methods to ACE_Mutex. These are useful for cases where we are going to be parameterizing classes like ACE_Malloc with some type of mutex wrapper (e.g., ACE_RW_Mutex, ACE_Mutex). * ace/Malloc_T.cpp (calloc): Added a new method called "calloc" that will not only allocate the memory dynamically, but will also give it an initial value (e.g., '\0'). Thu Dec 28 01:10:43 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * ace/OS.i: Modified the implementation of the TLI methods so that they are conditionally compiled away if the platform doesn't support TLI... Thanks to Neil Cohen for pointing out the need for this... * ace/OS.i: Modified the implementation of dlopen() and dlsym() to account for limitations with SunOS 4.x... * ace/Service_Repository.cpp: Modified this class to use the ACE_OS::dlclose method. * ace/Parse_Node.cpp: Modified this class to use the ACE_OS::dlopen and ACE_OS::dlsym methods. Wed Dec 27 23:25:03 1995 Jesper S. M|ller (stophph@diku.dk) * Added appropriate flags in OS.h for successful inclusion of several header files, such as Malloc.h and friends. Also added mprotect to ACE_OS for Win32 to avoid linker errors. * Added a return value (from map_file) to ACE_MMAP_Memory_Pool::handle_signal. The compiler was complaining. Likewise on ACE_MMAP_Memory_Pool::commit_backing_store (there 0 seemed like the correct off-the-end return value). * Removed include of some SV semaphore file, if not needed in Malloc.h. Worse for Memory_Pool.h, since the SV_Semaphore wrappers consistently differ completely from the other synchronization routines. I guess we'll need some variant of ACE_Process_Semaphore that takes an integer as a key instead of a string, and does not perform automatic init/destroy. * Also upgraded fd's from int to ACE_HANDLEs and changes -1 to ACE_INVALID_HANDLE where appropriate. * By help of aggresive preprocessor conditionals, made Handle_Set work with Win32. There is a fd_set abstraction with appropriate FD_xxx macros for WinSock, and it requires no sync'ing. The Handle_Set_Iterator should also work. The good looks of Handle_Set was impaired, though. Right now, the trigger is the ACE_WIN32 flag, although it should be something like ACE_FD_SET_USES_BITS for the unix approach, or like ACE_FD_SET_USES_VECTOR for the WinSock approach. * Reactor almost compiles now, but not quite: Handlers are addressed by fd, this is no longer possible - what a mess - we need to step through the handle indices somehow. This will likely get into some nasty quadratic complexities when iterating the handles to find the event_handler for each file handle. Mabye we can circumvent this with a hash table lookup for those opaque handles. * There was a problem with the Svc_Conf.l.cpp and the Svc_Conf.y.cpp and the extremely lame MSVC++ 2.0. I had to rename them to Svc_Conf_y.cpp, etc. Awful! * Added code to inquire the 'host' name for Win32 in the ACE_Client_Id class. Another candidate for ACE_OS. * About 60 or so ACE .cpp files compile now, which reminds me that I'll be working on some precompiled header scheme soon, since it takes for ever and ever, even on my 32meg system with pretty good SCSI drives. Mabye it's because I'm only running a 66MHz i486 DX2 (yawn). * Dozens of other changes have been made to various files, all pertaining to int vs. ACE_HANDLE. In Service_Manager.h, a signal number was an ACE_HANDLE, but just close by, some fd's were ints. Fixed that, too. Sat Dec 23 14:15:16 1995 Jesper S. M|ller (stophph@diku.dk) * I've also grouped the .i and .cpp functions by class, and #if'ed the sbrk and SysV pools out, since Win32 cannot support those. * Added 'inline' to day accessor functions in Date_Time. * Two things that missed me in Trace.cpp: 1) The inclusion order was so that I couldn't build Trace.o, since it didn't know the MALLOC_HOOK thing. I moved the #include of Trace.h down below that of ACE.h. 2) The declaration and definition of the ACE_Trace constructor differed by a const, which I added. 3) When linking, multiple symbols were found for some OS calls like mutex_init, corresponding to the larger OS Win32 functions. I has ACE_INLINED_OS_CALLS off, so sometimes the OS functions were inlined, sometimes not. I disabled the inline hack in Trace.cpp for WIN32 for now. This seemed to resolve matters. * There was a major problem in OS.i, where Synch.h was needed for mutex support (in conjunction with TSS info linked list). I chose to make thr_keycreate and some others non-inlined. * More 'is-it-a-handle-or-success' confusion in SOCK*.* Changed ACE_SOCK_Dgram to use int status. Changed ACE_SOCK_CODgram to use int status. Changed ACE_LSOCK to use int status. Also changed a few derived classes Fri Dec 22 14:03:15 1995 Douglas C. Schmidt (schmidt@lambada.cs.wustl.edu) * ace/OS.h: Added a new type for rwlock_t for platforms that don't support threading... Thanks to Neil Cohen for reporting this. * ace: Merged in all of Jesper's changes for NT and Chris Lahey's changes for AIX. * ace: Merged tli.h into OS.h to avoid name conflicts on Win32. * Fixed duplicated names where case is the only difference. ace/thread.cpp ace/Thread.cpp ace/TLI.h ace/tli.h apps/Token_Server/mutex_example/simple_token_client.cpp apps/Token_Server/mutex_example/Simple_Token_Client.cpp apps/Token_Server/script_example/scripting_token_client.cpp apps/Token_Server/script_example/Scripting_Token_Client.cpp tests/IPC_SAP/SOCK_SAP/FD-client.cpp tests/IPC_SAP/SOCK_SAP/fd-client.cpp tests/IPC_SAP/SOCK_SAP/FD-server.cpp tests/IPC_SAP/SOCK_SAP/fd-server.cpp Wed Dec 20 22:26:24 1995 Jesper S. M|ller (stophph@diku.dk) * FIFO.cpp: One last comparison of 'open' return status where and ACE_INVALID_HANDLE should be changed to -1. * One more last wrong comparison in FIFO_Recv_Msg.cpp. (Never say never again!) * Put an appropriate conditional around the inclusion of Handle_Set.h for ACE_WIN32 (for now). * Introduced a few backslashes in the macros of Dump.h that were somehow left out... Had to add a really stupid constructor for struct Tuple. I haven't a clue why MSVC++ wants this! Replaced 'return ACE_ODB;' with 'return ACE_ODB::instance_;' in the Singleton access function. * Added a constructor for ACE_ODB. It may be private, but it still needs to be defined... * Stack and Set compiles fine for Win32 (not surprisingly) * If'ed out the guts of ACE_IPC_SAP enable/disable calls for Win32, since async IO doesn't work that way on there. * Event_Handler now uses ACE_INVALID_HANDLE for default args. * SOCK compiles except for the ACE_SOCKET <> ACE_HANDLE problem. Refer to issue #3 above. * We're swamping the ace directory with .mak files. I used the winntace.mak file, which is compilable and linkable. Thu Dec 21 15:37:42 1995 Douglas C. Schmidt (schmidt@merengue.cs.wustl.edu) * ace: Greatly simplified the include files so that (1) compilers are faster and (2) the ACE_Trace mechanism works correctly. * ace/Trace: Modified the ACE_Trace_TSS class so that it is no longer a template. This was overkill since we know the type head of time (i.e., ACE_Trace_State). * ace: Added a number of new changes to ACE to make things work on AIX. Thanks to Chris Lahey for these changes. * ace/Thread_Manager.cpp: Removed the get_max_thr_id() method since it was not portable to NT or POSIX pthreads. Nothing in ACE depended on it anyway... * ace/OS: Added a new static data member called NULL_thread that is a "zero'd" out thread id. This is necessary to deal with the POSIX pthread implementation of a thread id, which is not always implemented as a number... By using this new approach, all the special-case code in Synch.cpp disappears... * ace/OS: Added a new method to class ACE_OS called thr_equal() that masks the differences between comparing thread ids using the threading libraries. This simplifies the code in Synch.cpp and Reactor.cpp. * ace: Updated all uses of mmap() to use the new ACE_MMAP_TYPE typedef. This deals with the fact that different versions of UNIX define mmap() inconsistently (e.g., some use void * and some use char *...). * ace: Removed testconfig.h and merged all of those #defines into OS.h. This centralizes changes in one place and also eliminates the need for ./apps and ./tests to include extraneous files... * ace/testconfig.h: Changed all uses of 0666 to ACE_DEFAULT_PERMS. Also, removed all PERMS enums and substituted ACE_DEFAULT_PERMS instead. Wed Dec 20 17:29:55 1995 Tim H. Harrison (harrison@merengue.cs.wustl.edu) * Rewrote the Token deadlock detection algorithm. It now performs "best-effort" detection of deadlock for remote acquires and complete deadlock detection for local acquires. Wed Dec 20 02:37:39 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * ace/OS.h: The select() system call has its own include file on AIX: . We can wrap the #include with a variable #if defined (ACE_HAS_SELECT_H). * include/makeinclude/platform_aix.GNU: Added new support for AIX. Thanks to Chris Lahey for these changes. Added a number of other minor changes, as well. * ace: Made a bunch of minor changes to get ACE to compile on SunOS4.x, Linux, and SGI. * ace/config-linux.h: added ACE_HAS_MSG (thanks to Neil Cohen for this). * ace/OS.h: Conditionally compile for ACE_HAS_UTIME for . * Released an alpha version of ACE containing the new Windows NT port. * Integrated and tested all the new Windows NT changes in class ACE_OS, as well as the Synch* and Threads* classes. We're now able to build Jesper's win32_test.cpp file in ./ace! A complete NT port should be just around the corner... Tue Dec 19 17:59:04 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * ace: Move the remaining contents of sysincludes.h into ACE.h. There is no more sysincludes.h (at long last!). * ace: Rearranged things so that the OS.[hi] files contain all the OS-specific #defines and #includes that were previously in sysincludes.h. * ace: Renamed the ACE_Misc class to class ACE, which is more representative of what it does. * INSTALL: updated the installation instructions to explain how the new directory structure works. Thanks to Neil Cohen for pointing out the discrepancy beteen the source and the documentation ;-). * Reorganized (by flattening) the ACE library directory structure to make it work for both Windows NT and UNIX. Note that Windows NT does not have symbolic links, so the old way of doing things didn't port... The consequences of these changes is there is now a single directory called $WRAPPER_ROOT/ace that contains the *.[hi] and *.cpp source files. This is also where the libACE.a and libACE.so libraries are built by default. Also, note that the suffix used by ACE has been changed from *.C to *.cpp to deal with the lame Visual C++ compiler... Tue Dec 19 01:26:54 1995 Douglas C. Schmidt (schmidt@merengue.cs.wustl.edu) * tests/ASX/Event_Server/Event_Server/Supplier_Router.cpp (put): Fixed up a problem with the Event_Server. Somewhere along the way it stopped being concurrent! The new version fixes this. Thanks to Alex V Maclinvosky for noticing this... * Added a billion new changes to class OS to integrate the Windows NT port with the rest of ACE. We are getting very close... Mon Dec 18 12:45:13 1995 Jesper S. Møller (stophph@diku.dk) * Major problems in the IPC_SAP. First, I detected that some open calls returned handles, some returned -1 or 0. For instance ACE_SOCK has a constructor, that calls this->open and expects a handle (which it even sets as the current handle value!). Unfortunately, the return from open is either 0 or -1, depending on how well the open went. ACE_HANDLE being typedef'ed to a void* really reveals some problems! I have solved the problem for the FIFO*.* family and for SOCK.* Mon Dec 18 12:43:46 1995 Douglas C. Schmidt (schmidt@merengue.cs.wustl.edu) * tests/Reactor/CODgram/CODgram.C (main): Fixed a bug in main() caused by initializing the Reactor twice. Thanks to Aurelio Nocerino for reporting this. * libsrc/Service_Configurator/Service_Config.C Added a new constructor to ACE_Service_Config that can be used to initialize internal variables without performing a full configuration. Mon Dec 18 01:22:22 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Service_Config: renamed tokens.h to sc_tokens.h to avoid file name collision on Win32. Thanks to Jesper S. M|ller for reporting this. * tests/Mem_Map/IO_Test: renamed io_test.C to test_io.C to avoid file name collision on Win32. Thanks to Jesper S. M|ller for reporting this. * libsrc/Misc/OS: Implemented condition variables for Windows NT. Sun Dec 17 21:23:32 1995 Douglas C. Schmidt (schmidt@merengue.cs.wustl.edu) * libsrc/Misc/Trace: Fixed up the ACE_Trace class so that it doesn't include any calls that will improperly trigger infinite recursion! This allows the ACE library to be traced completely. Sat Dec 16 19:12:37 1995 Jesper S. Møller (stophph@diku.dk) * Changes to OS.*: * Added conditionals to the OS.h for Win32, for the special ACE/Win32 thr_destroy_tss(), which is automatic for Solaris. * Changed declarations of thr_create, thr_suspend, thr_continue, thr_join and thr_[gs]etprio to use hthread_t instead of thread_t. * Changed return type of OS::open from int to ACE_HANDLE. * Provided non-obtrusive handling of thr_handle in OS::thr_create for non-Win32. * Copied ACE::writev to OS::writev for Win32. Something similar should happen for other systems... * Changes to Thread.*: * Changed join, suspend and continue to take handles. * Added thread handle return address to spawn. * Changes to Thread_Manager.*: * Added thread handles to the Thread_Descriptor structure. * Modified insert_thr and append_thr functions to also take handles. * Made ACE_Thread_Descriptor::Thread_State (a enum) public so Thread_Manager::append_thr could use it as a formal parameter (I suspect this is a bug in MSVC++). * Changes the various flavours of suspend, continue, etc. to use handles instead of id's. Keep in mind that none of this is destructive for Unix, but vital for Win32. * There is still a problem with ACE_Thread_Control registering itself with the Thread_Manager - the thread does not have means of finding it's own handle. In this particular case, we could have the thread duplicate it's pseudohandle into a real one, and pass that one along. I'd really, really, really rather not have to maintain a thread id->handle mapping myself; It would slow down thread manipulation and give some troublesome memory overhead. * Changes to Log_Msg.*: * OS::getpid instead of ::getpid. * Changes to Misc.*: * Sections inappropriate for Win32 #if'd out... * Provided naive timestamp function (No date) for Win32. * Changes to IPC_SAP.*: * Uses OS::ioctl instead of ::ioctl * Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE * Changes to FIFO.*, : * Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE * Changes to FIFO_Send.*: * open now returns an int insted of an ACE_HANDLE. * Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE * Changes to FIFO_Send_Msg.*: * open now returns an int insted of an ACE_HANDLE. * Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE * Uses OS::writev instead of ::writev * Changes to FIFO_Recv.*: * open now returns an int insted of an ACE_HANDLE. * Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE * Changes to FIFO_Recv_Msg.*: * open now returns an int insted of an ACE_HANDLE. * Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE * Changes to sysincludes.h: * Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE Sat Dec 16 12:29:06 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/IPC_SAP/Addr/INET_Addr.C: Changed the implementation so that the reentrant versions of the library calls are always used (class OS sorts this all out). This reduces the amount of clutter in the code. * libsrc/Threads/Synch: Added a new implementation of "readers/writer" locks for both Windows NT and POSIX pthreads. By default, these threads packages don't have this feature. * libsrc/Threads/Synch: Added a new macro called ACE_SYNCH_ERROR_RETURN that greatly simplifies the definition of the synchronization wrappers. * include/ace/sysincludes.h: Removed the pthreads_map.h file and integrated this into sysincludes.h. Fri Dec 15 02:39:25 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Misc/OS.i: Finished updating class OS so that it will compile correctly for OS platforms that don't support threads, as well as platforms that support POSIX Pthreads vs. Solaris threads, etc. * libsrc/Misc/OS: integrated Jesper S. M|ller support for POSIX regular expressions (e.g., compile() and step()) and sysinfo() into ACE. * Integrated and tested all of Irfan's changes to ACE to support the new persistence Name_Server. This added some new classes in various places that use the ACE_Allocator. Thu Dec 14 00:23:43 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * tests/ASX/Event_Server/Event_Server: Fixed an "off by 1" bug in the declaration of char *argv[3] in the open() methods of Supplier_Router.C and Consumer_Router.C. Thanks to the "ever dissatisfied" Alex V Maclinvosky for reporting this. * libsrc/Service_Configurator/Service_Config: Added a new "Singleton" access point for the global ACE_Allocator. * libsrc/Naming/Name_Options.C (parse_args): Made it possible to change the name of the process on the command line via the -P option. The default is still to use argv[0] as the process name. * include/ace/testconfig.h (ACE_DEFAULT_GLOBALNAME): Changed the value from "/localnames" to "/globalnames" to avoid a conflict. * libsrc/Misc/SString.C: Added Irfan's new "persistent" string mechanisms that use the ACE_Allocator_Manager. We may eventually update the existing SS* stuff to use this. * Merged in Jesper S. M|ller updates for Windows NT. * include/ace/Malloc.h: Added a forward declaration for ACE_Malloc_Iterator right before ACE_Malloc. Thanks to Antonio Tortorici for reporting it. * libsrc/Threads/Synch_T.h: Fixed a small typo in ACE_Null_Condition. Thanks to Antonio Tortorici for reporting it. * include: Added new config-linux.h and platform_macros.GNU config files for Linux. Thanks to Timothy Newell <910430n@dragon.acadiau.ca> for this stuff. Wed Dec 13 23:08:11 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/IPC_SAP/Addr/INET_Addr.C (set): Fixed a small typo in the ACE_INET_Addr::set (const char port_name[], ACE_UINT32 inet_address) method where the test should be != rather than == 0. Thanks to Bill Lear (rael@anarchy.cybercom.net) for reporting this. Sun Dec 10 12:23:54 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Service_Configurator/Service_Record.C (init): Fixed a small problem where a NULL pointer was being returned if a user passes a non-existent config file (using the -f option) to ACE_Service_Config::open(). Thanks to Dieter Quehl (quehl@erlh.siemens.de) for noticing this. * libsrc/Log_Msg/Log_Msg.C (log): added a new option (%T) that causes the current timestamp to be inserted into the log msg. Thanks to Dieter Quehl (quehl@erlh.siemens.de) for suggesting this. * libsrc/Misc/Misc: Added a new timestamp() method that returns the current timestamp in the form "hour:minute:second:microsecond." The month, day, and year are also stored in the beginning of the date_and_time array. * tests/Shared_Malloc: Added Irfan Pyarali new test program that exercises the new features of ACE_Malloc that are described in the following bullet. * libsrc/Shared_Malloc: Added Irfan Pyarali cool new versions of ACE_Malloc and ACE_MMAP_Memory_Pool. These new versions provide the following enhancements: 1. Persistence -- via the sync() method 2. Protection -- via the prot() method 3. Named malloc chunks -- via bind(), find(), unbind(). 4. Named iteration -- via ACE_Malloc_Iterator Thu Dec 7 00:31:26 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Reactor/Signal.C: Replaced ACE_Guard with ACE_TSS_Guard to ensure that locks are correctly released even if Event_Handler::handle_signal() callbacks invoke ACE_Thread::exit(). Thanks to Detlef Becker (beckerd@erlh.siemens.de) for suggesting this. * libsrc/Threads/Synch_T: Used inheritance to factor out the shared code between ACE_Guard, ACE_Read_Guard, and ACE_Write_Guard in order to reduce unnecessary duplication. * libsrc/Threads/Synch_T: Changed the implementation of ACE_Guard to keep a pointer to the LOCK rather than a reference. This makes the code more flexible and aids in factorization. * libsrc/Threads/Synch_T: Changed the implementation of ACE_Guard to incorporate ACE_Try_Guard semantics. This reduces the amount of classes and duplicate code in ACE. Wed Dec 6 21:36:02 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * include/ace/Trace: Changed the type of the string passed into ACE_Trace from char * to const char *. * libsrc/Reactor/Reactor.C: Had forgotten to initialize the initialized_ and requeue_position_ members appropriately in the constructor of the ACE_Reactor if ACE_MT_SAFE is *disabled*. Thanks to Mark Zusman for pointing this out. * libsrc/Threads/Synch_T.C: changed the order of some methods so they would be properly defined if ACE_HAS_THREADS and ACE_HAS_THREAD_SPECIFIC are *not* enabled. This should fix remaining problems with ACE on SunOS 4 and SGI. Thanks to Aniruddha Gokhale for noticing this. Tue Dec 5 01:06:14 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * Changed things around so that the Name_Server and Token_Server client interfaces are include in libACE. * libsrc/Shared_Malloc: added a const char *pool_name to ACE_Malloc::ACE_Malloc. This is passed into the constructor of the MEMORY_POOL to make it easier to dynamically name memory pools. Mon Dec 4 21:20:28 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Threads/Synch_T: Modified the place that the ACE_Thread_Specific methods are defined so that they will be compiled correctly for platforms without threads or thread-specific storage. Sun Dec 3 23:04:41 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/ASX/Message_Block: Modified clone() so that it takes an extra parameter that specifies which flags SHOULD NOT BE TRANSFERED to the clone. This defaults to ACE_Message_Block::DONT_DELETE. Thanks to Alex V Maclinvosky for suggesting this. Sun Dec 3 17:43:11 1995 Tim H. Harrison (harrison@lambada.cs.wustl.edu) * The number of files in the Token library has been reduced. As a result, many of the files have been renamed. Also, the .i files have been purged of relatively large methods (these have been moved to the .C files.) Lastly, most uses of dynamic memory allocation have been removed from the library. This was important to reduce the amount of serialization in threaded applications caused by the dynamic allocation. Sun Dec 3 17:29:54 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Threads/Synch: Modified all the synchronization classes so that they disallow assignment and initialization! * libsrc/Threads/Synch: Moved the ACE_Thread_Specific class from its own files into the Threads/Synch.[Chi] files. This should eliminate a set of horrible interdependencies among files. Sat Dec 2 16:07:40 1995 Douglas C. Schmidt (schmidt@mambo.cs.wustl.edu) * libsrc/Misc/SString.C (ACE_CString): Added a destructor to CString. Thanks to Tim for noticing this... Tue Nov 28 17:25:02 1995 Prashant Jain (pjain@tango.cs.wustl.edu) * apps/Name_Server/client/lib/Name_Proxy: Changed Name_Proxy to inherit from ACE_Service_Object rather than ACE_Event_Handler. This will allow a Name_Proxy to be dynamically linked into an application via the svc.conf file. * apps/Name_Server/client/lib/Name_Proxy: Added new methods init, fini, and info. Tue Nov 28 00:56:52 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * tests/Threads/test_thread_specific.C: Added code to test the new ACE_TSS_Guard class... * libsrc/Threads/Synch_T: Added the new ACE_TSS_Guard class. This class is similar to the existing ACE_Guard, except that it uses thread-specific storage to ensure locks are released even if a thread exits via thr_exit()! Mon Nov 27 20:39:58 1995 Prashant Jain (pjain@tango.cs.wustl.edu) * apps/Name_Server/{client,server}/tests: Added new tests to exercise the key features of the name server. * apps/Name_Server/client/lib: Simplified access to the nameserver database. For example, all the network-byte ordering code was moved out of the Local and Remote Name_Spaces. This code is no longer necessary since we'll be providing a different means to get portable name service repositories via a tool that extracts the "key/value/type" tuples and stores them in a machine-independent format. The result of this change is that the Name_Server code is much easier to understand and modify. * apps/Name_Server/client/lib: Split local and remote name spaces into two classes to simplify usage. This approach uses the Bridge pattern to have a baseclass called Binding and then have subclasses called Local_Name_Space and Remote_Name_Space. The constructor of Naming_Context then allocates the right one (i.e., it serves as a factory). This approach remove all the switch statements in the code and makes it much easier to use and extend. * apps/Name_Server: updated all the Name_Server components to use ACE naming conventions. * apps/Name_Server/client/lib: Changed ACE_Name_Options to use the Singleton pattern rather than the global variable... Mon Nov 27 00:47:32 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Shared_Malloc/Malloc.h: Named the previously anonymous struct inside of ACE_Malloc_Header to be ACE_Malloc_Control_Block in order to keep the OSE tools working. Thanks to Karlheinz for reporting this. * libsrc/Threads/Synch: Fixed a major bug in the ACE_Semaphore wrappers. Apparently, these had slipped between the cracks and were not correctly mapping onto the ACE return value scheme where -1 corresponds to an error with errno set to indicate the type of error. * tests: Cleaned up some files that mistakenly were defining LSOCK* objects even for platforms (i.e., Linux) that don't support them. Thanks to Timothy Newell <910430n@dragon.acadiau.ca> for noticing this. Sun Nov 26 12:42:51 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Shared_Malloc/Malloc: Added a new accessor method (memory_pool) that returns a reference to the MEMORY_POOL object used to configure ACE_Malloc. * libsrc/Shared_Malloc/Malloc: Changed the constructor of ACE_Malloc to take advantage of the new init_release method on all the ACE_*_Memory_Pools. * libsrc/Shared_Malloc/Memory_Pool: Added a new method to all the ACE_*_Memory_Pool classes called "init_release". This is called when ACE_Malloc finishes initializing the dynamic memory manager. This method is necessary in order to initialize the ACE_MMAP_Memory_Pool correctly if there are multiple processes that try to initialize ACE_Malloc simultaneously. In addition, also added an ACE_SV_Semaphore_Complex to the ACE_MMAP_Memory_Pool in order to serialize initialization correctly. * libsrc/Shared_Malloc/Memory_Pool: Added sync() and protect() methods to all of the ACE_*_Memory_Pool classes in order to support a uniform interface for use with the "robust memory" mechanism we're building. * libsrc/Mem_Map/Mem_Map: Added two new "protect" methods to ACE_Map_Manager in order to allow clients to change the protection of memory-mapped regions. * libsrc/ASX/Map_Manager: Changed Map_Manager methods to use "const" for EXT_ID and INT_ID at request of Prashant Jain (pjain@cs.wustl.edu). * libsrc/Shared_Malloc/Memory_Pool: Revised the ACE_Shared_Memory_Pool so that it would actually work correctly... This code hadn't been reviewed carefully before and there were some bugs... * libsrc/Shared_Malloc/Malloc: added "INLINE" to the ACE_Allocator_Adapter components. * libsrc/Shared_Malloc/Memory_Pool: Greatly simplified and consolidated the mmap(2) code for ACE_MMAP_Memory_Pool. * libsrc/Shared_Malloc/Memory_Pool.i (release): Removed the vestigal this->mmap_.remove() call in release(), but added the appropriate code to close the fd and unmap the region. Thanks to Irfan Pyarali for noticing this. Sat Nov 25 18:12:55 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/CORBA/CORBA_Handler.C (activate_service): Modified activate_service so that if (service_name != 0 && this->register_service (service_name, marker_name, service_location) == -1) return -1; is changed to if (service_name != 0 && service_location != 0 && this->register_service (service_name, marker_name, service_location) == -1) return -1; Irfan Pyarali requested this. Sat Nov 25 16:41:15 1995 Douglas C. Schmidt (schmidt@lambada.cs.wustl.edu) * libsrc/Misc/Set: Changed all the find() and size() methods to be const member functions. Thanks to Irfan Pyarali (ip1@cec.wustl.edu) for requesting this. Fri Nov 24 02:51:59 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Reactor/Reactor.C: Fixed the Reactor so that if we're compiling with DEADLOCK_DETECTION enabled it will create a uniquely named mutex by stringifying "this". Thu Nov 23 21:45:43 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/IPC_SAP: Changed * libsrc/Service_Configurator/Service_Config: Added three new methods to allow programmers to set the process-wide Singletons for Reactor, Service_Repository, and Thread_Manager. Tue Nov 21 01:59:06 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Mem_Map/Mem_Map.C: Fixed a stupid typo in map_it() that was causing problems due to unsigned arithmetic semantics... This should make the file_reverse.C Mem_Map tests work correctly now... Thanks to Bill Lear for noticing the problem. * tests/Mem_Map/IO-tests/io_test.C (parse_args): Fixed a classic C/C++ braino in io_test.C: The for loop in parse_args() for (int c; (c = get_opt () != -1); ) should be for (int c; ((c = get_opt ()) != -1); ) How embarrassing. Maybe Bertrand Meyer is right -- C++ is too dangerous for its own good... ;-). Thanks to Bill Lear for finding this! * Removed all traces of ACE_Condition from the library. This should make life much easier for compilers (like G++) that can't grok templates very well... * libsrc/Threads/Thread_Specific.C (ts_object): Added a new method that allows you to simultaneously "test and set" thread-specific data! This is used to support a neat new trick that ensures locks are released even if a thr_exit() is called! * libsrc/Service_Configurator/Service_Repository: Removed the Recursive_Mutex from Service_Repository and replaced it with a regular (non-recursive) mutex. Had to rewrite the code a bit so that it wouldn't try to call internal methods that acquired the mutex (this leads to instant deadlock!) Mon Nov 20 01:05:47 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Threads/Synch: Finally gave in and accepted the fact that GNU G++ is a horrible, horrible blight on mankind... Changed the internals of Synch.[Chi] to completely remove any dependencies on templates. I hope this fixes some portability problems deep in the libraries... Added several new classes to reflect this change: ACE_Mutex_Guard, ACE_Mutex_Condition, and ACE_Recursive_Mutex. * libsrc/IPC_SAP/UPIPE_SAP/UPIPE_Acceptor.C (ACE_UPIPE_Acceptor): Fixed a stupid typo that was causing the constructor of UPIPE_Acceptor to become inlined!!! * apps/Gateway/Gateway: Fixed up the Makefile so that the gatewayd executable would compile with G++. * include/ace/config-irix5.3-sgic++.h: Changed the SGI config.h file so that it uses select() rather than poll() by default. The select() version of the Reactor is implemented more efficiently in ACE... * include: Added config files for AIX courtesy of Byron Walton . * libsrc/Reactor/Signal.C: #ifdef'd out some code in Signal.[hC] that was causing problems for the HPUX C++ compiler. What a *horrible* compiler! * libsrc/Reactor/Event_Handler.h: Added two new methods to ACE_Event_Handler: get_priority() and set_priority(). These will be used to control the behavior of the ACE_Reactor's dispatching. This also required added a new data member to ACE_Event_Handler that stores the priority (which defaults to MIN_PRIORITY). * libsrc/Misc/Stack.C (enqueue): Added a new class called ACE_Unbounded_Queue. This is required for Tim's Token_Server connection repository stuff... * libsrc/CORBA/CORBA_Handler.C: Added new support to both the single-threaded and multi-threaded versions of CORBA_Handler so that it will now suspend/resume the services associated with a CORBA_Handler. * libsrc/CORBA/CORBA_Handler.C (ACE_MT_CORBA_Handler): Updated the constructor to use the associated Thread_Manager to spawn a new thread. This will allow the suspend() and resume() methods to atomically resume and suspend the daemon thread and its event handler. * libsrc/Threads/Synch.h: Fixed up the order of #includes to solve problems with circular header dependencies! * Had to add zillions of little changes to avoid problems with circular includes for G++... * tests/ASX/Event_Server/Event_Server/Peer_Router.C (bind_peer): Fixed a typo that had been dormant for ages due to C++'s very late binding of templates... G++ picked this right up! Sun Nov 19 11:55:02 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Reactor/Signal: Replaced the static HANDLER_SET stuff withing ACE_Sig_Handlers with a different implementation using ACE_Fixed_Set. This should fix nasty problems with static variables on HP/UX... * Fixed the entire library so that all occurrences of ace_log_msg are changed to use the ACE_LOG_MSG macro. This macro has magic properties that should greatly simplify the effort required to compile ACE robustly on platforms with lame C++ compilers... * libsrc/Log_Msg/Log_Msg: Finally got my act together with respect to thread-specific data and the ACE_Log_Msg class. The new version can be conditionally compiled such that it won't use the ACE_Thread_Specific smart-pointer wrapper mechanism unless the platform supports thread-specific storage and threads. This will make life much easier for lame C++ compilers that can't handle static data member templates correctly... * apps/Name_Server/{client,server}/lib/Makefile (LIBS): Added a reference to -lACE in the Makefiles of the ./lib directories in order to get GCC to work correctly... * Added a bunch of fixes courtesy of Bill Lear to make ACE compile more cleanly with GNU GCC 2.7.x. Sat Nov 18 11:27:40 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Misc/Trace.C: Fixed up the ACE_Trace class so that it will compile better on platforms that don't support thread-specific storage. The trick was to make a new Singleton called ACE_Nest_Depth and then conditionally compile it according to whether the platform supports thread-specific data or not! * include/makeinclude/platform_sunos5_g++.GNU: Added the new config file that should allow ACE to build correctly with GCC 2.7.x. Todd L. Montgomery deserves a big round of applause for getting this stuff to work! If I had a budget, I'd give him a raise ;-) * libsrc/Misc/Set.C (remove): Tightened up the semantics of all the *Set::remove() methods so that they return 1 if they succeed, 0 if the item isn't in the set, and -1 if they fail. Thanks to Tim Harrison for noticing the inconsistencies. Fri Nov 17 01:34:51 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * apps/Logger/Reactor_Logger: Fixed up this example app so that it would compile with GNU G++ correctly. There was a problem with the order of include files! Thanks to Todd L. Montgomery for reporting this. * libsrc/ASX/Module.C (writer): Fixed ACE_READER so that it is properly qualified with ACE_Task_Flags::ACE_READER. Thanks to Neil Cohen (nbc@metsci.com) for finding this! * apps/Gateway/Gateway/Routing_Entry: Replaced ACE_Fixed_Set with ACE_Unbounded_Set to get around the seemingly endless problems with HP/UX... * libsrc/Misc/Set: Fixed a braino in ACE_Unbounded_Set, where I'd forgotten to define cur_size_. Thanks to Todd L. Montgomery for reporting this. * libsrc/Connection/Acceptor.C: Change the #undefs of the shorthand names PA_AC_1, PA_AC_2, and PA_AD in libsrc/Connection/Acceptor.C to PR_AC_1, PR_AC_2, and PR_AD (same as in Connector.C and Strategies.C). Thanks to Dieter Quehl for reporting this. Thu Nov 16 02:14:22 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Misc/Trace: Fixed the ACE_Trace stuff by making the "nesting_indent_" a static data member. This will undoubtedly break some lame C++ compilers, but it's easy enough to remove this stuff via conditional compilation using the ACE_NTRACE #define in ./include/ace/config.h. * libsrc/Threads/Thread_Specific.C (cleanup): Under no circumstances should ACE_Thread_Specific be allowed to called ACE_Trace. Otherwise, chaos will result! * apps/Name_Server/{client,server}/tests/Makefile: Switched the order of the -lACE and -lName* so that -lACE came *afterwards* in order for the SGI linker to pick up the symbols correctly. * libsrc/Reactor/Signal: I'd accidentally put the "dump" methods in the *.i file rather than the *.C file. This was causing problems for G++. * libsrc/ASX/Task: Changed all "Q_" prefixes to "ACE_" prefixes in order to work around a bug with HP/UX... * Recompiled everything on SunOS 4.x with SunC++ 4.0.1. It seems to work! Thu Nov 16 18:05:03 1995 Tim H. Harrison (harrison@tango.cs.wustl.edu) * I moved around some class declarations so that g++ can properly instantiate templates for ACE_Token_Collection and ACE_Token_Manager. Wed Nov 15 00:26:40 1995 Tim H. Harrison (harrison@lambada.cs.wustl.edu) * The token library should now compile on platforms which do not support threads. All token components will be compiled into the library, but use null mutexes and condition variables. The remote mutex library shall run properly on single-threaded platforms, so it compiles as usual. Wed Nov 15 01:05:38 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * Fixed a bunch of minor problems with the SGI port. Things should work now on IRIX 5.3! * man/man3: Completely regenerated all the manual pages to reflect all the recent updates. * libsrc: Added ACE_TRACE macros to every single method in ACE! This will help with debugging... Wed Nov 15 00:26:40 1995 Tim H. Harrison (harrison@lambada.cs.wustl.edu) * The token library should now compile on platforms which do not support threads. All token components will be compiled into the library, but use null mutexes and condition variables. The remote mutex library shall run properly on single-threaded platforms, so it compiles as usual. Tue Nov 14 01:58:47 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * tests/CORBA: Added a new test to illustrate the ACE_MT_CORBA_Handler. * libsrc/ASX/Task.C (ACE_Task_Exit): Fixed a niggling problem with ACE_Task_Exit. Originally, if a thread exited via an implicit ACE_Thread::exit() (i.e., "falling off the end of the ACE_Task::svc_run function) then the ACE_Thread_Control on the thread stack would automatically unregister the thread from the ACE_Thread_Manager. However, this did *not* occur if a thread explicitly called ACE_Thread::exit() since in that case the destructor for ACE_Thread_Control never got called. The solution to this is a trivial change to ACE_Task_Exit, which now maintains an instance of ACE_Thread_Control internally, which will automatically be released when the thread-specific thread-exit-hook destructor gets called to cleanup upon thread exit. Since this happens regardless of whether the thread terminates implicitly or explicitly the ACE_Thread_Manager will always be able to clean up it's internal resources (unless the process exit()s, which is a whole different issue... ;-)). * Changed all occurrences of ACE_CORBA_Handler to ACE_ST_CORBA_Handler. Now we've got two types of CORBA_Handlers: single-threaded (ST) and multi-threaded (MT). Take a look at ./apps/Orbix-examples/Event_Comm/{Supplier,Consumer} for an example of how to leverage this in a portable manner! * libsrc/CORBA/CORBA_Handler: Totally redesigned the ACE CORBA_Handler stuff so that it now uses the Singleton pattern explicitly, rather than using the half-baked static method version... Changed the test code to reflect this update! * libsrc/CORBA/CORBA_Handler.C (activate_service): Changed the check so that if == 0 then we don't try to do a putit (previously, this check used , which is less useful...). * libsrc/CORBA/CORBA_Handler.C (activate_service): Removed the flag from the constructor so that we can make the CORBA_Handler and the MT_CORBA_Handler equivalent. * include/ace/sysincludes.h: Added a new macro called ACE_THREAD_EXIT_HOOK that enables application threads (including the main thread) to register a Task * who's close method will automatically be called when the thread exits, either implicitly (by falling off the end) or explicitly (by a thread calling ACE_Thread::exit ()). * libsrc/ASX/Task: Moved ACE_Task_Exit into the interface part of ACE_Task so that Irfan can maybe use this in his stuff ;-). * libsrc/Misc: Incorporated the ACE_Date_Time class into the release. This is an *interface* for a system independent representation of date and time. Implementation will follow... * libsrc/CORBA: Added a new MT_CORBA_Handler, which makes it very straightforward to integrate the ACE_Reactor with multi-threaded (MT) Orbix. * libsrc/Threads/Token.C: Yow, fixed a dumb problem in Tokens.C where I was failing to include the *.i file if we weren't compiling with inlining on!!!! Mon Nov 13 01:13:37 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/ASX/Message_Block: Added several new methods to Message_Block to allow users to access and set various flags. Thanks to Alex V Maclinvosky for suggesting this and providing a prototype implementation. * include/ace/sysincludes.h: Added a new macro called ACE_NDEBUG that can be used to toggle support for "live object dumping". If this macro is enabled then * libsrc/Misc/Dump.h: Added support for "live object dumping" into ACE. This technique is implemented with the "External Polymorphism" pattern described in a paper available at http://www.cs.wustl.edu/~schmidt/EuroPLoP-96.ps.Z. * libsrc/Threads: Added new classes called *_Process_* and *_Thread_* for ACE_RW_Mutex, ACE_Barrier, ACE_Condition, and ACE_Semphaore. This will allow programmers explicitly state the scope of their locks more explicitly and will also facilitate portability to Windows NT... * libsrc/Threads: Updated the constructors of all the Synch and Synch_T classes to take an option const char * called "name." At the moment, this doesn't do anything, but when we port to Window NT it will be used to ensure that we can name our process-global synchronization objects. * libsrc/Threads/Synch: Added a new tryacquire method to ACE_RW_Mutex to be consistent with acquire and release... * libsrc/Threads/Synch.C (ACE_Mutex): Added a new "name" parameter to an ACE_Mutex in order to support process-semantics on NT... * include/ace/sysincludes.h: Added a #define for EDEADLK in case some systems don't support it (this is needed by the new ACE_*_Token stuff). Sun Nov 12 14:17:01 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * apps/Name_Server: Modified the client and server test programs so that they can both be linked statically and/or dynamically. If svc.conf is present then dynamic linking is used, otherwise static linking is used. This makes it much easier to test!!! * apps/Name_Server/client/lib/Naming_Context.C (local): Changed things a bit so that if our server host name is "localhost" then we assume we are local no matter what... * apps/Name_Server: Moved directories around a bit so that all the tests and libs for the client/server portions of the ACE_Name_Server build correctly... * apps/Name_Server/server: Replaced the ad hoc Name_Acceptor and Name_Handler to use the official ACE_Acceptor and ACE_Svc_Handler... This cleans up the code considerably... * libsrc/Threads/Synch: Added a new wrapper for the the UNIX file locking mechanism called ACE_File_Lock. This has the same interface as the other locking mechanisms (e.g., ACE_Mutex and ACE_Semaphore). Therefore, it can be used in the ACE_Guard class! Sat Nov 11 13:53:48 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Shared_Malloc/Memory_Pool: Improved MMAP_Memory_Pool so that it will be smarter about remapping the file if we aren't trying to force a fixed addr to be used for the mapping. In particular, if we *aren't* forcing a particular address, the new solution will be more flexible and allow the OS to determine where to remap the memory should we need to grow the backing store and the mapping range... * libsrc/Misc/Set: Implemented a simple version of the Unbounded_Set class and its iterator. * libsrc/Misc/SString: Changed all the implementations of methods in SString classes to use new/delete rather than strdup()/free(). * apps/Name_Server/client/Name_Proxy: Changed rcv_reply() to recv_reply(). * apps/Name_Server/client/Name_Proxy: Modified ACE_Name_Proxy so that the constructor and open take an ACE_Synch_Options. * apps/Name_Server/client/Name_Options.C (ACE_Name_Options): Added a default for the Name_Space directory called (ACE_DEFAULT_NAMESPACE_DIR) to the testconfig.h file... Sat Nov 11 00:24:37 1995 Tim H. Harrison (harrison@lambada.cs.wustl.edu) * tests/Tokens/test_token_manager/test_token_manager.C: The token manager has a working deadlock detection algorithm. ACE_Local_Mutex uses this to report deadlock situations. Changes were made to ACE_Local_Mutex to fix a couple bugs which were causing deadlock. Also, a new test application has been added to test deadlock detection using the local mutex. Fri Nov 10 17:16:06 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Mem_Map/Mem_Map.h: Changed the type of from long to size_t. * tests/Threads/test_thread_manager.C (main): Added a main() for the case when there's * tests/ASX/UPIPE_Event_Server/event_server.C (main): Fixed a typo that was causing problems on SunOS 4.x. * tests/Service_Configurator/IPC-tests/client/local_spipe_client_test.C: added #include "ace/Log_Msg.h" (why was this working?!). * include/makeinclude/rules.lib.GNU: Changed the order of operations in rules.lib.GNU from $(AR) $(ARFLAGS) $@ $? -$(RANLIB) $@ -chmod a+r $@ to $(AR) $(ARFLAGS) $@ $? -chmod a+r $@ -$(RANLIB) $@ to keep ranlib happy on SunOS 4.x. * apps/Time_Server: Added a Makefile * include/ace/sysincludes.h: Removed the include since it was causing major problems on SunOS 4.x... * apps/Name_Server/Naming_Context.C: Fixed up a couple of problems with casts. Thanks to Jack Erickson for pointing this out. Thu Nov 9 15:49:40 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Threads/Synch_T: moved Atomic_Op from ./Misc to ./Threads and merged it into the Synch_T files. This makes more sense as a place to put it... * libsrc/Misc/SString.C (operator +=): Fixed a typo that would have caused mistakes when memcpy() was used. Thanks to Prashant Jain for noticing this. Wed Nov 8 22:36:51 1995 Tim H. Harrison (harrison@lambada.cs.wustl.edu) * libsrc/Reactor/Reactor.C (TOKEN_GUARD): The reactor now uses the TOKEN_GUARD macro. The Reactor can now be conditionally compiled with ACE_REACTOR_HAS_DEADLOCK_DETECTION to use the new ACE_Local_Mutex in conjunction with the ACE_Token_Manager to detect deadlock. The deadlock detection algorithm has not yet been implemented, but the hooks are now in place. * libsrc/Tokens: This subdir includes ACE's new Token library. Check out libsrc/Tokens/README for more info. * tests/Tokens: There are a couple test applications for the new Token library. See tests/Tokens/README for more info. * apps/Token_Server: This directory contains some new client interfaces to the old ACE TokenServer, now Token_Server. There are also some example use cases included in this directory. As always, see apps/Token_Server/README for more info. Wed Nov 8 00:14:55 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/IPC_SAP/IO_SAP: Added the new classes for IO_SAP from Gerhard Lenzer (lenzer@csaserv.erlh.siemens.de). This eliminates UNIX I/O-specific features from ACE. * libsrc/Misc/Set: Added a new find() method to each of the ACE_*_Set classes... * include/ace/sysincludes.h (ACE_ALLOC_HOOK_DECLARE): Changed enum __Ace { __ACE } to struct __ACE {}. I think this will cause less problems with M.I... * libsrc/ASX/Message_Block: Added a new "allocator" parameter to a Message_Block. This allows the memory stored by a Message_Block to come from someplace besides the normal heap (e.g., a shared memory segment!). * libsrc/ASX/Message_Block.C (ACE_Message_Block): Yow, fixed a bug in the destructor where ACE_BIT_ENABLED was being used in place of ACE_BIT_DISABLED! I think this was causing a memory leak... * libsrc/Reactor/Reactor: added a pair of methods that allow a thread to set/get the notion of who "owns" the event loop. Only the owner of the loop can do a handle_events() call. Also changed things so that the requeue_position() are available for both threaded and non-threaded implementations (just to have a uniform interface...). * libsrc/ASX/Message_Block: added a new constructor and a new init() method that just assume ownership of a char * passed as the parameter. Note that this does *not* set any other fields in the Message_Block and is only used to ferry around totally opaque data in the Message Block! Tue Nov 7 00:52:15 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * tests/Log_Msg/test_log_msg.C (main): Added some new tests to make sure that op_status() and errnum() work on ace_log_msg. Thanks to Tim Harrison for these tests. Mon Nov 6 12:55:46 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Threads/Thread_Specific: Changed a couple of places in the Thread_Specific code so that key_ is initialized to 0 and the ts_obj * is initialized to 0. If these *aren't* 0 then weird bugs happen on Solaris... Thanks to Tim Harrison for noticing this and suggesting the fix! * libsrc/Threads/Synch_T: Added an accessor method to obtain the underlying mutex within ACE_Condition. * libsrc/Threads/Synch.C (ACE_Process_Mutex): Added a dummy argument of type const char * to ACE_Process_Mutex. This is in anticipation of the info required in Windows NT to support a named process-wide Mutex. On UNIX, this argument is ignored... Fri Nov 3 19:02:54 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/IPC_SAP/SOCK_SAP: Back from C++ World... Fixed a couple of typos in SOCK_Dgram_Bcast and SOCK_CODgram that included the *.i files multiple times... Thanks to Alex V Maclinvosky for reporting this. Tue Oct 31 02:12:13 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Reactor/Reactor: Modifed the MT_SAFE Reactor so that the its open() method keeps track of which thread originally created it. This thread is then considered the "owner" of the Reactor. If a different thread tries to run the handle_events() method then an error is returned. * libsrc/ASX/Task.C: Added a "group id" field to the ACE_Task. This can be used to suspend and resume a group of tasks atomically. Also added default suspend() and resume() methods that do just that! * libsrc/Reactor/Reactor: Made the open() method thread-safe. Thanks to Detlef Becker (beckerd@erlh.siemens.de) for pointing out the need for this. Mon Oct 30 00:02:53 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Shared_Malloc/Memory_Pool.C (ACE_MMAP_Memory_Pool): Made it possible to configure the ACE_MMAP_Memory_Pool with a (backing_store_) file name so that it is possible for multiple processes to share one wellknown file, as well as to have multiple pools per process. Check out the ./tests/Shared_Malloc/test_malloc.C file for an example of how this works (try the -p -e -L10000 -t3 options). * libsrc/Reactor/Reactor: Moved handler_i into the *.C file to avoid problems with inline functions on HP/UX. * libsrc/Misc/SString: Added a new class called ACE_CString. This class is similar to ACE_WString (which has "wide character" size), though CString has regular "char" size. Note that both of these classes are "true" string classes, unlike ACE_SString, which is a very simple string class that is only to be used for very specific purposes... * libsrc/Shared_Malloc/Memory_Pool.C (acquire): Fixed an "off-by-one" error in ACE_MMAP_Memory_Pool::acquire() that was causing an extra byte to be written to the backing store file... This was causing the ./tests/Shared_Malloc/test_malloc.C program to fail when -p was given. After this fix the test works again... (thank God!). Sun Oct 29 22:43:25 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Shared_Malloc/Malloc: Added two new classes: ACE_Allocator and ACE_Allocator_Adapter. ACE_Allocator uses inheritance and dynamic binding to provide extensible mechanisms for allocating and deallocating memory. ACE_Allocator_Adapter implements the Adapter pattern to enable ACE_Allocator to be used with instantiations of the ACE_Malloc<> template class. Sat Oct 28 13:51:07 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * tests/ASX/Event_Server: Added a new directory called UPIPE_Event_Server, which tests a version of the Event_Server that is instantiated with ACE_UPIPE_* IPC mechanisms, rather than by the ACE_SOCK_* mechanisms. * libsrc/IPC_SAP/Addr: Created a new file called UPIPE_Addr.h. This file contains a typedef of ACE_SPIPE_Addr to ACE_UPIPE_Addr. The purpose of doing this is to "logically" decouple the ACE_UPIPE* classes from the ACE_SPIPE* classes (even though they share the same *physical* representation at this point...). * libsrc/IPC_SAP: Fixed a small bug in TLI_Connector.connect() and SOCK_Connector.connect() that failed to set the new_stream::handle_ to ACE::INVALID_HANDLE when the connection failed. Thanks to the ever-astute Mark Patton (mark_patton@tx72.mot.com) for noticing this. Thu Oct 26 15:08:22 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * tests/Threads: created a new test program called test_thread_manager.C that tests the new semantics for managing groups of threads. * libsrc/Reactor/Signal.C (ACE_Sig_Action): Added a new method that allows me to create a Sig_Action object that contains both the handler and the signal to register for. This handler is register to handle the signal in the constructor of the object... * libsrc/Threads/Thread_Manager: enhanced the Thread_Manager to add support for operations (i.e., suspend, resume, kill) on a group of threads. * libsrc/Threads/Thread_Manager: Added a new method that allows the Thread_Manager to resize itself automatically when it's internal table gets full. * libsrc/Threads/Thread_Manager: Updated the return value of Thread_Manager::spawn() and Thread_Manager::spawn_n() so that they return -1 on failure *and the group id* on success. Originally, they returned 0 on success, but this new return value is more useful since it can be used to control groups of threads atomically. Wed Oct 25 01:03:32 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * apps/Name_Server: Began integrating the newly donated name server into ACE. There are a number of dependencies on RogueWave that must be removed, but things are looking good so far. * libsrc/Misc/Set: Changed the name of ACE_Unordered_Set to ACE_Fixed_Set to be consistent with the ACE Stack classes... * libsrc/Misc/Set: Added new ACE classes called ACE_Unbounded_Set, ACE_Bounded_Set, ACE_Unbounded_Set_Iterator, and ACE_Bounded_Set_Iterator to deal with ACE name service stuff. * libsrc/Misc/SString: Added a new class called ACE_WString that gives a very simple "wide-character" string representation for ACE. This is needed for the ACE name service stuff. * libsrc/Misc/SString.C (operator =): Fixed this so that ::strdup is matched up with ::free, rather than with delete... * libsrc/Log_Msg/Log_Msg.C (log): Updated the ACE_Log_Msg class to store an ostream * in thread-specific storage. This can be used in conjunction with the dump() method on each ACE class, as well as with the ACE_ERROR and ACE_DEBUG logging macros. Tue Oct 24 00:19:13 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * Added a definition of the dump() method to every class in ACE in anticipation of the changes requested for Siemens. * Changed all occurrences of ACE_Signal_* to ACE_Sig_* to make the ACE naming of signal handling wrappers consistent. * libsrc/Threads/Thread: Fixed some obscure bugs with the way that ACE_Thread was compiling on platforms that don't support threads. * include/ace/config-irix*.h: Removed all TLI support from the SGI platform. It seems to be totally screwed up from the tests that I've run and there's no sense in bending over backwards to support an IPC API that is brain-damaged to begin with... * apps/Logger/Service_Configurator_Logger/Thr_Server_Logger: Fixed up the code so that the Thr_Logging_Server stuff will compile correctly even for platforms that lack threads! * libsrc/Connection/Strategies: Added new strategies that provide Singleton creation and Process concurrency policies. * libsrc/Connection/Connector.C (handle_close): Make sure that all pending timer objects are removed from the Reactor's timer queue when a Connector shuts down. In addition, make sure to remove and delete all dynamically allocated ASTs, as well. Thanks to Karl-Heinz Dorn (kdorn@erlh.siemens.de) for suggesting this. * libsrc/Threads/Thread_Manager.C (wait): Modified wait() so that it now takes an ACE_Time_Value *, which can be used to wait until all threads terminate or a timeout occurs... * libsrc/Threads/Thread_Manager: Moved Thr_Descriptor from within the ACE_Thread_Manager class to become ACE_Thr_Descriptor at file scope. This is in anticipation of the cool new thread manager stuff on the way... * libsrc: Updated every class in ACE to include a "dump" method with the signature "void dump (void);" This method soon will be tied into the ACE_Dump mechanism to allow all live objects in ACE to have their state dumped automagically on-demand. This is useful for debugging and tracing etc. * libsrc: Updated every class in ACE to include a "Alloc hook." This hook will enable all ACE classes to be allocated from a particular memory pool. * include/makeinclude/rules.local.GNU: fixed the clean target to delete the *.rpo files (else gcc -frepo can get some crazy errors) and combines all rm-commands for the target realclean into one command (in some cases the last two lines do not have any files to delete, in which case rm produces an usage message). Thanks to John Huchinson (hutchiso@epi.syr.ge.com) for the patch. * libsrc/IPC_SAP/Addr/INET_Addr: Fixed all the uses of gethost* and getserv* to use the reentrant get*_r functions if ACE_HAS_REENTRANT_FUNCTIONS is set and ACE_MT_SAFE is set. Thanks to Bill Tang for suggesting this. * libsrc/Misc/OS: Started adding support for the POSIX *_r functions to the OS class. * include/ace: Added a new #define called ACE_HAS_REENTRANT_FUNCTIONS. This indicates that the platform supports reentrant functions (i.e., all the POSIX *_r functions like gethostbyname_r). Mon Oct 23 21:15:50 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * include/makeinclude/platform_irix5.3.GNU (LIBS): Removed the link of the nsl lib since it seems not to be present on this platform. Thanks to Karel Zuiderveld for noticing this. * libsrc/IPC_SAP/Addr/INET_Addr.i (operator ==): Enhanced the semantics of comparison to check both the port number and IP address. Thanks to Mark Patton (mark_patton@tx72.mot.com) for suggesting this. Thu Oct 19 00:10:28 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/IPC_SAP/Addr/INET_Addr.C (set): Fixed a stupid bug that failed to set errno appropriately if things go wrong with this method. Thanks to Mark Patton (mark_patton@tx72.mot.com) for noticing this! Sat Oct 14 12:07:16 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Threads/Thread_Manager: Modified the Thread_Manager so that even in the case where we are compiling for non-MT systems the Thread_Manager still has the same method interface (all of which are no-ops). Wed Oct 11 00:12:57 1995 Douglas C. Schmidt (schmidt@mambo.cs.wustl.edu) * Finished commenting all the classes in ACE. Updated all manual pages accordingly. Fri Oct 6 14:17:17 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * tests/ASX/Event_Server/Event_Server: Changed ACE_SOCK_Acceptor &sa = (ACE_SOCK_Acceptor &) *this->acceptor_; to ACE_SOCK_Acceptor &sa = this->acceptor_->acceptor(); Thanks to Dieter Quehl (quehl@erlh.siemens.de) for suggesting this. Thu Oct 5 00:22:56 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/ASX/Map_Manager: Added a new find() method to the Map_Manager. This method only checks for the existence of an EXTERNAL_ID, and doesn't return the INTERNAL_ID. * Introduced the new "trait"-based *_Connector, *_Acceptor, and *_Stream interfaces for all the IPC_SAP classes. Basically, for each class like {SOCK,TLI,SPIPE,etc,}_{Acceptor,Connector,Stream}, there's now a typedef for the appropriate type of ACE_*_Addr subclass and the appropriate type of ACE_*_Stream class. For example, here's what's in ACE_SOCK_Acceptor (same goes for ACE_SOCK_Connector): class ACE_SOCK_Acceptor { public: // ... // = Traits. typedef ACE_INET_Addr PEER_ADDR; typedef ACE_SOCK_Stream PEER_STREAM; }; Once C++ compilers can grok template typedefs correct, this new approach will allow much greater simplification of code, so that template classes like template class ACE_Acceptor { /* ... */ virtual int open (const PEER_ADDR &); }; that are currently used like this: ACE_Acceptor acc; can be replaced with template class ACE_Acceptor { /* ... */ virtual int open (const PEER_ACCEPTOR::PEER_ADDR &); }; that are used like this: ACE_Acceptor acc; i.e., the ACE_SOCK_Acceptor maintains a "trait" that the ACE_Acceptor uses to determine the appropriate addr. This is more concise and less error-prone than the current scheme that requires you to pass into the ACE_INET_Addr separately (ugh). Note that the trick to making all this work is to typedef the PEER_ADDR trait into the ACE_SOCK_Acceptor class, as follows: class ACE_SOCK_Acceptor { public: typedef ACE_INET_Addr PEER_ADDR; // Trait... }; Unfortunately, none of the C++ compilers (e.g., SunC++ 4.0.1, G++ 2.7.0) support this stuff yet... Therefore, I've added a set of macros that that will toggle back and forth between whichever approach works, depending on the setting of ACE_HAS_TEMPLATE_TYPEDEFS. Hopefully, over time compilers will support this stuff correctly and life will become easier. * libsrc/ASX/Message_Queue: Changed all occurrences of the S_MUTEX and S_CONDITION macros to ACE_SYNCH_MUTEX and ACE_SYNCH_CONDITION in order to conform to the new ACE namespace control conventions. * libsrc/Connection/Acceptor: Modified the Acceptor class to split it into two classes: ACE_Acceptor (which implements a very simple, very concise version of the Acceptor pattern, without all the extra strategy mechanisms, etc.). These strategies have now been factored out into a new class called ACE_Strategy_Acceptor. The point of these changes is to "keep simple things simple, but enable powerful extensions when necessary." All the test programs that utilized the earlier strategy version of the Acceptor have been updated to the the Strategy_Acceptor instead. * libsrc/Connection/Connector: added two new protected methods, connect_svc_handler() and activate_svc_handler(). These methods allow subclasses to override the Connector's strategies for connection establishment and concurrency. In addition, it makes the pattern much easier to explain via the Connector pattern and also is more similar to the Acceptor. Wed Oct 4 18:45:58 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * apps/Orbix-Examples/Event_Comm: Fixed the examples in this directory so that they compile with the new ACE. Tue Oct 3 17:33:46 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * include/makeinclude/rules.nested.GNU: Added support so that ACE can now be built in parallel using the -jN option of GNU make. To accomplish this, just type % make MAKEFLAGS=-j2 on the command line and the "-j2" flag will be passed through to the make hierarchy. Once the SunC++ compiler supports parallel makes correctly (Template.DB causes problems) this will allow me to tke advantage of my new dual-CPU SPARCstation 20!!! Mon Oct 2 13:34:14 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Connection: Cleaned up some of the code related to Time_Values * by adding a new method call time_value() to the ACE_Synch_Options class. * libsrc/Service_Config/Service_Record: Changed things a bit so that we don't have to include "ace/Stream.h" in Service_Record.h, but instead use forward decls of the appropriate types. This breaks a circular dependency that was causing problems for GNU C++. Thanks to John Hutchinson (hutchiso@epi.syr.ge.com) for finding this problem. Sat Sep 30 13:45:08 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * Changed all uses of typedef PARENT to inherited, which is less obtrusive. Fri Sep 29 01:33:54 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Misc: Completed the new OS class, which will be used shortly to remove all direct UNIX system calls in ACE. * libsrc: Completed redocumented the header files for almost all of ACE. The goal was to document all the methods in all the classes. This has most been achieved (only a few minor changes remain). The result is *much* better manual page entires in ./man/man3, as well as much more consistent header files and overall documentation for ACE. * libsrc/Reactor/Reactor: Changed all uses of get() to handler_i(). Also changed the check_connections() method to check_handles(). Note that all these changes are invisible to apps... Thu Sep 28 01:22:36 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/IPC_SAP/Addr/SPIPE_Addr: Changed all occurrences of {get,set}_user_id() and {get,set}_group_id() to user_id() and group_id() in order to be more consistent with other parts of ACE. * libsrc/ASX/Task.C (module): Modified the implementation of several Task helper methods (e.g., sibling()) so that they don't crash if there is not Module associated with the Task. * libsrc/ASX/Stream: Removed the sync_ data member from the private part of Stream since it didn't seem to be used for anything. * libsrc/ASX/Map_Manager.C (bind): Changed the type of the INT_ID to bind() from INT_ID to const INT_ID &. * libsrc/IPC_SAP/Addr/Addr: Moved some methods around in the *.i file to the *.C file in order to be smarter about inlining. * libsrc/Misc/Auto_Ptr.h: Added a new pair of classes called "auto_ptr" and "auto_array_ptr". These implement the ANSI/ISO C++ standard auto_ptr mechanism, which helps to write exception-safe code. The code is based on material from Jack Reeves (jack@fx.com) and Dr. Harald M. Mueller (mueller@garwein.hai.siemens.co.at). * libsrc/Threads/Synch_T.h (ACE_Null_Condition): Changed the behavior of Null_Condition::{signal,broadcast} so that they return 0 rather than setting errno = ETIME and returning -1. Wed Sep 27 00:16:01 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Threads/Synch: Fixed a bug with class ACE_Barrier: count_ wasn't being set properly. * tests/Threads/test_barrier.C (main): Fixed a stupid bug in the ACE_Barrier -- the main function was exiting, thereby destroying the barrier! * tests/IPC_SAP/{SOCK,TLI}_SAP: Added test cases to exercise the new reuse_addr feature of SOCK_Connector and TLI_Connector. * libsrc/IPC_SAP/{SOCK,TLI}_SAP/{SOCK,TLI}_Connector: Implemented the new behavior for reusing a local address. Also fixed a few error cases that would have lead to descriptor leaks. * libsrc/IPC_SAP/SOCK_SAP/SOCK.C (open): Modified a few return values and comparisons to ease the transition to WIN32. * libsrc/ASX/Task.C (ACE_Task): Changed the behavior of Task::activate() so that it uses the ACE_Service_Config::thr_mgr() Singleton if no thread manager has been associated with a Task when it becomes an active object. * libsrc/Service_Configurator/Service_Config: Added a new static method to class Service_Config called thr_mgr(). This static method behaves as a "Singleton" and provides a convenient default thread manager that is available to all threads throughout a process. * libsrc/IPC_SAP: Changed all the IPC_SAP/*_SAP/*_Connector.[hiC] files and the Connection/Connector.[Chi] class in order to add "reuse_addr" behavior consistent with the Reactor. This enables the client to specify that the "local_addr" should be reused (e.g., via SOCKREUSEADDR), even if its "2 minute wait" time hasn't elapsed yet. The libsrc/Connection/Connector.[Chi] files were also changed to support this new interface. * libsrc/Log_Msg/Log_Msg.C (log): Fixed a mistake in Log_Record caused by the new thread-safe storage enhancement. The data being logged was being rounded up incorrectly. Thanks to Daniel Proulx (daproulx@qc.bell.ca) for reporting this. * libsrc/Reactor/Signal.i (operator): Made a minor change to the definition of operator struct sigaction * to work around a bug with the HP/UX C++ compiler (lame, lame, lame)... * libsrc/Service_Config: Changed all occurrences of ACE_Service_Config::reactor (which was originally a globally accessible public method of class ACE_Service_Config) to ACE_Service_Config::reactor () (i.e., made the reactor a Singleton implemented by a static method). This was long overdue and will fix all sorts of niggling problems with order of initialization since the reactor() method can do "lazy creation" of Reactors now, i.e., create one the first time it is referenced. In addition, changed the ACE_Service_Config::svc_rep to ACE_Service_Config::svc_rep () in the same manner. * Changed all occurrences of the form: *_Stream stream; *_Connector con (stream, remote_addr); if (stream.get_handle () == ACE::INVALID_HANDLE) ... To *_Stream stream; *_Connector con; if (con.connect (stream, remote_addr) == -1) ... which is cleaner and less error prone with respect to UPIPE_Stream (which doesn't have a valid handle once it's connected). * Changed all occurrences of get_handle () == -1 to get_handle () == ACE::INVALID_HANDLE to help smooth the move to WIN32... * libsrc: Created a new directory called Shared_Memory and moved the Shared_Malloc_MM and Shared_Malloc_SV classes from the ./Shared_Malloc directory to here, where they are now called Shared_Memory_MM and Shared_Memory_SV. This is a better name/place for them since they never really had anything to do with malloc in the first place! What remains the Shared_Malloc is the Malloc.* and Memory_Pool.* classes, which are typically used for truly shared malloc/free. * apps/Gateway/Gateway: added new logic to the Gateway to enable it to specify which local port to bind() to. Tue Sep 26 21:17:29 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Connection/Strategies.C (open): Added a return 0; at the end of the ACE_Thread_Strategy::open method. * tests/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.C: Made CLI_Stream a template so that we don't have to worry about multiple includes of classes... Mon Sep 25 01:41:27 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/IPC_SAP: Revised the close() method of TLI_SAP and SOCK_SAP so that they don't try to close down a handle that == ACE::INVALID_HANDLE. * Changed all uses of ::free ((char *) ...) to ::free (ACE_MALLOC_T (...)) to work around inconsistent prototype problems with some compilers. * include/ace/sysincludes.h: Changed ACE_MALLOC_TYPE to ACE_MALLOC_T which is a bit less verbose... * libsrc/Service_Configurator/Makefile (BUILD): Fixed the argument to sed from -s (which is invalid) to -e (which is valid). Thanks to Doug Ritter (dougr@guilder.datalytics.com) for noticing this. Also used sed to do a more elegant fix on the age-old problem of inconsistent prototypes for free() and realloc()... * libsrc/IPC_SAP/UPIPE_SAP: Rewrote all the UPIPE_* classes to remove any dependencies on class UPIPE. This class appears to be unnecessary since it mimics the behavior of class SPIPE. To simplify the behavior of the UPIPE_* classes, they now inherit from the SPIPE_* classes where appropriate. * libsrc/IPC_SAP/UPIPE_SAP: Changed the semantics of the UPIPE_Connector and UPIPE_Acceptor connection methods so that they close down the SPIPE_Stream after a connection is established successfully. This is important to conserve descriptors. * libsrc/Misc: Created a new class called OS, which encapsulates *all* of the UNIX system calls and library routines within a single class. The rest of ACE will program only to the methods in this interface, which will make it much easier to port to other versions of UNIX (and WIN32!). Sun Sep 24 11:49:47 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/IPC_SAP/SOCK_SAP: Conditionally compile the LSOCK_* stuff if the OS platform (e.g., Linux) doesn't support it. * Changed all occurrences of ACE_HAS_NO_... to ACE_LACKS_... in all the config*.h files and the headers/source. This reads better... * Changed all uses of (1) Acceptor::peer_acceptor_ to Acceptor::acceptor(), (2) Svc_Handler::peer_ to Svc_Handler::peer(), and (3) Connector::peer_connector_ to Connector::connector() to make the code more abstract and resilient to future changes. * include/ace/sysincludes.h: Added a new macro called ACE_NEW_RETURN that provides a useful abstraction for expressions involving operator new since we can change memory allocation error handling policies (e.g., depending on whether ANSI/ISO exception handling semantics are being used). * libsrc/Threads/Thread.C: Changed things a bit so that if ACE_MT_SAFE == 0 then Thread::self() returns 1, regardless of whether the platform supports threads. * Went through the entire library and (hopefully) made sure that all calls to global system calls and library routines are prefixed with "::". * libsrc/Misc/Get_Opt.C: Changed this class to use the Log_Msg logging mechanism rather than stderr... * tests/Misc: Added a new test program to test the Profile_Timer. * tests/Reactor/misc: Added a new test program to test the Handle_Set. * libsrc/Service_Configurator: Changed the error messages in Svc_Conf.y and Svc_Conf.l to go to the ACE Log_Msg logging mechanism rather than stderr... * libsrc/Connection/Acceptor: Modified the Acceptor and Oneshot_Acceptor classes so that they take advantage of the new ACE_Creation_Strategy, ACE_Accept_Strategy, and ACE_Concurrency_Strategy components. This will make is easy to define Acceptors that can be flexibly configured to use various creation strategies (e.g., dynamic linking, singletons, dynamic memory creation, etc.) for making Svc_Handlers. * libsrc/Connection/Svc_Handler: Added several new classes -- ACE_Creation_Strategy, ACE_Accept_Strategy, and ACE_Concurrency_Strategy -- that form the heart of the new ACE_Acceptor implementation. These classes define the creation, passive connection acceptance, and concurrency strategies employed by the Acceptor factory when it receives a connection from a client. * libsrc/Connection/Acceptor: Modified the implementation of the Acceptor and the Oneshot_Acceptor. These classes are no longer related by inheritance since they behave in fundamentally different ways and sharing code was making it hard to write and use these classes correctly. * libsrc/Misc/Misc: Moved the enum INVALID_HANDLE from IPC_SAP.h to Misc.h since this is actually more general than just the sockets stuff and we need to be portable to WIN32... Therefore, any code that originally said ACE_IPC_SAP::INVALID_HANDLE should now be ACE::INVALID_HANDLE. * Removed the ACE_OMIT_SERVICE_CONFIGURATOR flags. These are annoying -- anyone who wants to subset ACE should be responsible for doing this stuff. Fri Sep 22 22:36:33 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Threads/Thread_Spawn.C: Greatly simplified the implementation of Thread_Spawn by leveraging the new class Task semantics for activate(). Now, all the concurrency activation mechanisms necessary to create active objects are associated with a Task and all the Thread_Spawn needs to do is to define a new make_svc_handler() Factory Method to create a SVC_HANDLER and activate it! * libsrc/ASX/Task.C: Tightened up the semantics of Task::activate (which turns a passive object into an active object, i.e., one with its own thread). Now, if an object is activated more than once it ignores the other requests, unless the force_active parameter is enabled. Moreover, activate() now takes a parameter that indicates the number of threads to allocate for the Task. This makes it simple to have a "thread pool" associated with a Task. Thu Sep 21 00:49:55 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * tests/Connection: Updated the CPP-acceptor and CPP-connector to use the underlying Acceptor and Connector patterns more robustly. Also added new hooks to include a Service_Config component so that integrating this with the ACE dynamic linking scheme will be a snap! * libsrc/Connection/Acceptor.C: Revised the Oneshot_Acceptor to be robust in situations where it isn't given a Reactor *... * apps/Logger: Fixed a couple of minor problems with *.i files being included when __INLINE__ is set. This should help G++ compiler ACE better... * libsrc/Reactor/Reactor: Enhanced the Reactor::notify() method so that it takes both an Event_Hander * and a Reactor_Mask, which it passes to the Reactor's main event loop thread via the pipe. The event loop thread uses this mask to determine which method to invoke. This new feature is due to the insight of Karl-Heinz Dorn (kdorn@erlh.siemens.de). * libsrc/Connection/Connector: Fixed a braino in Connector::handle_output, which was using ::getpeername() to check whether a connection has been established with a peer. Naturally, this only works for sockets, and doesn't work at all for TLI or SPIPEs... * libsrc/IPC_SAP/Addr/SPIPE_Addr.C (set): Changed the return type of this method to "int" in order to conform to the types expected by the Acceptor/Connector patterns. * Removed all uses of the global scope "::" for all variables and methods that are not UNIX system calls or library calls in preparation to change over to the new OS class (requested by Siemens). Wed Sep 20 14:39:08 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/IPC_SAP/SPIPE_SAP: Renamed the SPIPE_IO classes to SPIPE_Stream to be consistent with the other parts of the ACE library. Updated all parts of the library to reflect this change. * tests/Service_Configurator: Moved the current contents of this directory into a new directory called IPC-tests. Created a new directory called Connection-tests where the dynamic linking examples for Siemens will go. * libsrc/Reactor/Signal: Made a bunch of minor changes to support signal handling on SunOS 4.x platforms. Thanks to Aniruddha Gokhale for help with this. * libsrc/Threads/Synch.h: Modified the #ifdefs a bit so that Synch_T.h gets included regardless of whether ACE_HAS_THREADS. * libsrc/Threads/Synch_Options: Added a new set() method to make it possible to initialize the Synch_Options from outside the constructor. * libsrc/Connection/Svc_Handler.C: Added checks within the ACE_Svc_Handler so that if we are given a NULL Reactor we don't crash! * libsrc/Mem_Map: Tidied up this class and added comments to the header so that the class2man has something to generate manual pages from! * libsrc/Misc/Misc: Added a new method called "round_to_pagesize", which was previously in Mem_Map. This is a better place for it since other parts of ACE (e.g., Shared_Memory) use it. * libsrc/Misc/Misc: Added a new method called "get_file_size", which was previously in Mem_Map. This is a better place for it since other parts of ACE might want to use it. Tue Sep 19 00:24:41 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * Released a beta version of ACE 3.3.1 for G++ testing. * libsrc/IPC_SAP/SOCK_SAP/SOCK_Dgram.C: Removed a stray INLINE that was causing problems for G++. Thanks to E. Jason Scheck for reporting this. * libsrc/IPC_SAP/Addr/INET_Addr: Improved the documentation for this class and also added new semantics to the constructor and set() method so that a "ip_addr:port_number" tuple can be given as a single string (e.g., "1234:tango.cs.wustl.edu" or "1234:128.252.166.57"). This is useful since it gives a uniform interface for addressing for Internet domain, UNIX domain, and SPIPE domain addresses... Updated the ./tests/Connection tests to use this form (which is nice since now they are all very orthogonal!) * tests/Connection: Created a whole new suite of tests that exercise the connection patterns for all of the relevant IPC mechanisms (e.g., SOCK_SAP, TLI_SAP, SPIPE_SAP, and UPIPE_SAP). * bin/clone.C: fixed the first #include so that it uses #include "ace/sysincludes.h". Thanks to Alex V Maclinvosky for noticing this. Mon Sep 18 01:52:07 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/ASX/Message_Queue.C (close): Fixed yet another problem with variables being defined in for loops. G++ is good for detecting this ;-). * libsrc/Threads: Moved all the template classes from Synch.* into Synch_T.* in order to make it possible to compile templates with G++. Thanks to E. Jason Scheck for suggesting this. * libsrc/IPC_SAP/UPIPE_SAP: Make a number of changes to ensure that all the UPIPE_SAP classes conform to the same interface as all the other ACE IPC classes. * Changed all occurrences of THR_FUNC to ACE_THR_FUNC to protect the global namespace better. Sun Sep 17 13:36:23 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * tests/ASX/Message_Queue: Fixed a typo in these test programs that caused a segfault since a vararg parameter was omitted on a call to the Log_Msg::log() method. Maybe iostreams isn't so bad after all... ;-) * apps/Logger/Service_Configurator_Logger/Thr_Server_Logger: fixed a stupid error that was caused by some mods I made after ECOOP to update the threaded logging server. When I changed the Thr_Logging_Acceptor so that it no longer inherited from the Logging_Acceptor I forgot to redefine the init() method... * man: Totally regenerated the ACE manual pages using the new versions of the OSE tools provided by Karl-Heinz Dorn (kdorn@erlh.siemens.de). * Changed all occurrences of MT_SYNCH and NULL_SYNCH to ACE_MT_SYNCH and ACE_NULL_SYNCH, respectively. This is consistent with the ACE naming conventions and had been an oversight when I renamed everything earlier. * Fully built and tested ACE with the __INLINE__ flag enabled. This will generate code with many small methods in the library inlined. Had to fix a bunch of minor things to allow this to work without compilation-order dependency problems. * libsrc: Made a bunch of changes to the way that header files are included internally to ACE in order to break compilation-order dependencies. This is necessary to support GNU G++'s lame handling of templates. None of this stuff should affect application code. * tests: Added a whole new slew of tests for the remaining parts of ACE that weren't currently included in ./tests. This stuff exercises ACE components like the Log_Msg logger and factors all the #if defined (DEBUGGING) code out of the ./libsrc directory tree and puts it in the ./tests directory tree, where it belongs. * Changed all uses of the error macros LM_* to ACE_* in order to avoid name collisions with other libraries, frameworks, and toolkits. In addition, changed all uses of the error enumerals LOG_ to LM_ in order to avoid a conflict with system #defines in . In order to change these automatically, I used the following UNIX command sequence: % find . -type f -print | xargs perl -p -i -e 's/LM_/ACE_/g' % find . -type f -print | xargs perl -p -i -e 's/LOG_/LM_/g' Sat Sep 16 11:55:18 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * tests/Threads: Added a new test for Thread_Specific storage. * Added a new platform/compiler configuration flag called ACE_TEMPLATES_REQUIRE_SOURCE that must be set for compilers (e.g., GNU G++) whose template mechanism must be able to see the source code (i.e., the *.C files). Changed *lots* of header files to enable this... Also had to change the corresponding *.C files so that they wouldn't get included twice... * libsrc/Connection: redid the implementation of Acceptor, Connector, and Svc_Handler to get more control over the scope of #defines like #define SH SVC_HANDLER, etc. * libsrc/Threads/Thread_Spawn: Totally redid the implementation of Thread_Spawn to use the Acceptor class template. This greatly reduces the amount of code to implement the Thread_Spawn! * libsrc/Threads/Thread_Spawn: Moved the Thread_Spawn implementation into the ./libsrc/Threads directory rather than in the ./libsrc/Service_Configurator directory since it deals with threading and thus belongs in the other place. Fri Sep 15 00:25:51 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Threads/Token.i (tryacquire): Added a cast to fix passing a const pointer to a function that was expecting a non-const. Thanks to E. Jason Scheck for reporting this. * libsrc: Added a bunch of changes to enable G++ to compile ACE. A lot of this involves moving around info in header files so that templates can be dealt with using the relatively lame GNU C++ repository scheme. Thanks to E. Jason Scheck for all his help in this. * libsrc/Synch: created Synch_Options.C out of Svc_Handler.C, so that Svc_Handler.C could be "template pure"; all the other files were already separated. Thanks to E. Jason Scheck for recommending this. * Makefile (clone): Added a tiny fix that solves a weird problem that arises with symbolic links on HP/UX. Thanks to Jam Hamidi (jh1@osi.com) for tips on how to fix this. Thu Sep 14 10:55:30 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * apps/Gateway/Gateway/Channel.C (route_message): Updated the main routing code to check for whether a channel is_active() (i.e., is actually connected) before trying to send messages to it. This was originally done in the Set class iterator, but I revised that to make it more reuseable and to workaround bugs in the HP/UX compiler so I had to update the main code... * libsrc/Threads/Thread_Specific: Added a new method to called ts_object () to class ACE_Thread_Specific that get the thread-specific object for the key associated with this object. Returns 0 if the data has never been initialized, otherwise returns a pointer to the data. This is useful since now you can query a thread-specific storage mechanism to see if there's ever been a thread-specific object created *without* having to actually create one if one hasn't been created yet! Thanks to Detlef Becker (beckerd@erlh.siemens.de) for pointing this out. * include/makeinclude/platform_sunos5_sunc++_orbix.GNU (LIBS): Changed the default compilation strategy for SunOS 5.x machines to use -mt. This seems to be necessary to build robust libraries that are thread-safe. Thanks to Phil Mesnier and Chris Cleeland for hounding me until I changed the existing solution. If you *don't* want this behavior you need to remove -mt from the platform_macros.GNU file and and remove the ACE_HAS_THREADS and ACE_MT_SAFE flags, etc. from the config-sunos5.*.h files. * libsrc/Shared_Malloc/Memory_Pool.C (ACE_MMAP_Memory_Pool): Added a new parameter to the constructor called write_each_page that if enabled forces a write to each page to ensure that space is allocated from the file system (otherwise, we can end up failing due to optimisitic resource allocation...). Thanks to Phil Brooks for detecting this issue and implementing a solution. * include/ace/sysincludes.h: Added #ifdef support for HP/UX, which fails to properly wrap with an extern "C" block. Mon Sep 11 01:39:35 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Connection/Connector.C (handle_input): Changed the call to Svc_Handler::close() to accept the default value of 0 rather than -1... Thanks to Mark Seaborn for noticing this. * libsrc/Connection: Changed all uses of ADDR to PEER_ADDR to avoid a name clash in Linux... Thanks to James Morris for finding this. Sun Sep 10 03:56:18 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Threads/Synch: Added support for "barrier synchronization" to ACE in the form of ACE_Barrier. Thanks to Bruce Worden (bruce@betsy.gps.caltech.edu) for suggesting this and pointing me in the right direction. * tests/Threads: Added a test for the new barrier synchronization mechanism. Sat Sep 9 11:58:16 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Reactor/Reactor: Changed Reactor::max to Reactor::max3 to avoid problems with conflicting names of macros in Sun header files! Mon Sep 4 14:34:52 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Reactor/Signal: The new ACE_Signal_Handlers mechanism appears to be working! There's a test in ./tests/Reactor/misc called test-signal.C that illustrates how all this works. * libsrc/Reactor/Signal: Added several new methods to ACE_Sig_Action to make life easier to implement the new ACE_Signal_Handler code... * libsrc/Reactor/Signal.C (ACE_Sig_Action): Changed the order of the arguments to the ACE_Sig_Action constructor. It's almost always the case that you want to vary the SignalHandler, but only rarely do you want to vary the mask or flags. By reordering this, it's easier to get the correct default values without adding extra junk... Mon Sep 4 01:11:29 1995 Tim Harrison (harrison@tango.cs.wustl.edu) * libsrc/IPC_SAP/SOCK_SAP/SOCK_Dgram_Multicast: added support to allow a port to be reused for multicast sockets. This is useful if you are multicasting to multiple processes, some of which are on the same host! * libsrc/ASX/Map_Manager: Fixed an odd bug that must have gone undetected for a long time somehow. Basically, the "is_free_" field of the ACE_Search_Structure struct was never being set to it's correct initial value of 1. I don't know how this didn't surface before... At any rate, it is fixed now... * include/ace/sysincludes.h: Changed the inline methods for SET'ing and CLR'ing bits to be macros in order to get cheap polymorphic behavior... Also changed them to use the prefix "ACE_" to avoid namespace pollution. Changed all dependencies in the source code (only a few...). * libsrc/Reactor/Signal: Added a new class called ACE_Signal_Handlers, which subclasses from ACE_Signal_Handler. This new class implements the semantics required for Siemens. For example, this class allows multiple signal handlers to be registered for the same signal. It also makes SA_RESTART the default mode. Note that by default, the Reactor uses the original ACE_Signal_Handler semantics. If you want the new semantics, simply pass the Reactor a pointer to ACE_Signal_Handlers. * include/ace/sysincludes.h: Removed the automatic inclusion of ./libsrc/Misc/Misc.h from sysincludes.h since this was causing problems with include file ordering. Sun Sep 3 00:22:11 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Reactor/Signal.C (remove_handler): Moved a definition of ACE_Sig_Action out of an inner block to avoid portability problems. * libsrc/ASX/Map_Manager: Improved the documentation of this class and fixed up a couple of problems with the scope of loop indexes. * libsrc/Misc/{Stack,Set}: Added this new file that contains a set of Stack and Unordered Set implementations. The Unordered Set is used in various places in ACE (e.g., libsrc/Reactor/Signal and apps/Gateway/Gateway/Routing_Entry). * libsrc/Log_Msg/Log_Msg: Moved the definition and declaration of Thread_Specific ace_log_msg from this directory to ./libsrc/Misc/Misc.h in order to cleanup the namespace and also to help make this work on DEC platforms... * libsrc/Reactor/Signal: Changed ACE_Signal_Handler from a static class to a non-static class in order to allow subclassing. This is necessary to support the Siemens requirements. * libsrc/Shared_Malloc/Memory_Pool: Modified ACE_MMAP_Memory_Pool so that it no longer stores the name of the backing store in a static character array (which made it impossible to have more than one of these at a time...). The new version stores the name in each ACE_MMAP_Memory_Pool object. It also selects a name that won't conflict with other names by using ::mktemp. * tests/Shared_Malloc/test_malloc.C (parse_args): Fixed two stupid omissions of "break" when parsing command-line arguments. Isn't C++ great?! (NOT)... * apps/Synch-Benchmarks: Came up with a killer solution to the nagging problem of POSIX Pthread's lack of an integral thread id (a la Solaris threads thr_self()). The solution leverages off of our new ACE_Thread_Specific wrapper to provide the necessary functionality. Thanks to Reginald S. Perry (perry@zso.dec.com) for triggering the thoughts that lead to this solution... Sat Sep 2 17:00:46 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/IPC_SAP/TLI_SAP/TLI_Acceptor: Changed the implementation of ACE_TLI_Acceptor so that ACE_TLI_Request is defined inside the TLI_Acceptor.C file (this is the so-called "Cheshire Cat" technique). This clean up the code and the global namespace a bit. Fri Sep 1 00:53:47 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * Released new version of ACE 3.3 * libsrc/IPC_SAP/UPIPE_SAP/UPIPE.C: Fixed a small problem with failing to #ifdef this file correctly if we don't have threads... Thanks to John Morey (jmorey@hitel.com) for reporting this. * tests/ASX/CCM_App/svc.conf: Fixed the svc.conf file so that it looked in the .shobj directory rather than the .obj directory. * Released new version of ACE 3.2.9... * libsrc/Log_Msg/Log_Msg: Added a new field called "restart_" to the thread-specific storage. This will be used to control whether system calls are restarted when interrupted. * Changed inheritance syntax from class xxx : public yyyy { }; to class xxx : public yyyy { }; so that the OSE tools would work correctly. Thu Aug 31 00:12:40 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/IPC_SAP/UPIPE_SAP: Changed all uses of UPIPE_Addr to SPIPE_Addr since they were the same thing. This also allows much reuse of code... * libsrc/IPC_SAP/{TLI_SAP,SOCK_SAP,SPIPE_SAP}: fixed the "complete" method for these classes so that it uses the new ACE::handle_timed_complete() method in libsrc/Misc. This cleans up the code by merging common logic. * libsrc/IPC_SAP/{DEV_SAP,FILE_SAP,SPIPE_SAP}: fixed the "connect" method for these classes to conform to the API used by the SOCK_SAP and TLI_SAP wrappers. In addition, cleaned up the code so that common logic was pushed into a new method in libsrc/Misc called ACE::handle_timed_connect(). Wed Aug 30 00:20:18 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Connection/Acceptor.C (open): Fixed this method so that it returns a value on all paths through the code... * libsrc/IPC_SAP/TLI_SAP/TLI.C (ACE_TLI): Moved the option allocation code from the TLI::open() method into the TLI constructor in order to make sure it is always called! * libsrc/IPC_SAP/DEV_SAP/DEV_Connector: Changed the signature of the DEV_Connector::connect method to allow users to specify flags, permissions, and timeouts (this is now consistent with other parts of ACE). * libsrc/IPC_SAP/FILE_SAP/FILE_Connector: Changed the signature of the FILE_Connector::connect method to allow users to specify flags, permissions, and timeouts (this is now consistent with other parts of ACE). * tests/IPC_SAP/TLI_SAP: Updated the test code to check the new timer support for connection establishment. * libsrc/IPC_SAP/TLI_SAP: Updated the code to make it conform to the interfaces provided by SOCK_SAP. This primarily affected the TLI_Acceptor and TLI_Connector classes in order to add support for timed connects and accepts. * libsrc/Reactor/Signal.C: Modified Signal_Handler::dispatch so that it saves/restores errno to prevent it from being corrupted by the handle_signal callback. Thanks to Detlef for suggesting this. * libsrc/Shared_Malloc/Memory_Pool: Changed the name of ACE_Local_Memory_Pool to ACE_Sbrk_Memory_Pool. Then added a new version of ACE_Local_Memory_Pool that uses the C++ operator new to acquire chunks of memory. This enables the ACE Malloc class to integrate with existing programs that use new/delete. Thanks to Karlheinz for suggesting this. * libsrc/IPC_SAP: Added the UPIPE mechanism donated by SIEMENS. This provides an intra-process IPC mechanism that has the same API as the interprocess and network mechanisms. * Reran catman on ./man/windex. Thanks to Dieter Quehl (quehl@csaserv.erlh.siemens.de) for reporting the need for this. * Released new version of ACE 3.2.9... * tests: Fixed a bunch of minor problems that occurred when building on HP/UX. Thanks to John Morey (jmorey@hitel.com) for reporting these. * apps/Gateway/Gateway/Peer_Message.h: Changed the default values of the parameters to Peer_Addr so they aren't trying to assign negative values to unsigned chars! Thanks to John Morey (jmorey@hitel.com) for noticing this... Tue Aug 29 18:52:17 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Thread/Thread_Specific: Changed the constructor so that it will take an initial TYPE *, which will be used to initialize the thread-specific object. This is necessary to support the changes to ACE_Task described in the following bullet. * libsrc/ASX/Task: Added a new class called ACE_Task_Exit to Task.C. This class is used in conjunction with ACE_Thread_Specific to keep exit information for a Task in thread-specific storage. This ensures that the Task::close() method will get called no matter how the thread exits (e.g., via Thread::exit() or by "falling off the end of Task::svc_run"). Mon Aug 28 09:54:35 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * Released new version of ACE 3.2.9... * libsrc/Reactor/Handle_Set.C: changed the type of MSB_MASK from u_long to ACE_UINT32 to handle problems with the Alpha's 64 bit longs... * libsrc/Threads/Thread_Specific: Continued to try and get this class to build correctly on other platforms... I think I've just about got it working right now... * libsrc/IPC_SAP/IO_SAP/IO_SAP: Added installation flags that indicate whether the platform has terminal ioctl flags like TCGETS and TCSETS. I know that SunOS 5.x has these, but I'm not sure about other platforms... Sat Aug 26 13:55:45 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * Released new version of ACE 3.2.9... Fri Aug 25 09:05:09 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Threads/Thread_Specific.h: Fixed a typo that was causing this file to fail on HP/UX. Thanks to Neil Cohen (nbc@metsci.com) for finding this! * libsrc/IPC_SAP/DEV_SAP/DEV_IO: Added conditional support for getmsg/putmsg calls in the DEV_IO class. This will make things work correctly for platforms that don't support SVR4 STREAM pipes. * libsrc/IPC_SAP/FILE_SAP/FILE_IO: Added the same fixes to FILE_IO that I added to DEV_IO... * include/ace/sysincludes.h (MAXNAMELEN): Fixed a typo in sysincludes.h that caused problems for the G++ compiler. * libsrc/Connection/Acceptor.C (handle_close): Removed a diagnostic message that was getting printed if a Oneshot_Acceptor had already been removed from the reactor (it's ok for this call to fail). Thanks to Irfan Pyarali (ip1@cec.wustl.edu) for noticing this! * libsrc/ASX/Task.C (ACE_Task): Fixed a bug in the constructor that prevented a Message_Queue from being allocated automagically. Thu Aug 24 16:47:14 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * include/ace/sysincludes.h: added support for 64 bit machines so that Internet addresses are 32 bits, as they must be! * libsrc/Shared_Malloc/Malloc: Changed things so that MALLOC_STATS is now *off* by default... (also changed the name to ACE_MALLOC_STATS). Wed Aug 23 15:21:25 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * include/ace/config-osf1.h: Added support for thread-specific storage. Please let me know if this breaks on OSF/1! * libsrc/Threads/Thread: Added support for the thread-specific storage wrappers for both Pthreads and Solaris threads. Also, rearranged some of the code to emphasize similarities between Pthreads and Solaris threads. * libsrc/Threads/Thread_Specific: Updated this to remove "static" from all the data members in this class since those should be specific to an *instance* rather than to an instantiation of the particular template class. Tim claims this works... * libsrc/Threads/Token.C: Fixed a couple of typos that misspelled "assert" (jaysus...). Thanks to David Trumble (trumble@cvg.enet.dec.com) for noticing this. * libsrc/Threads/Token.C (release): Fixed a very stupid bug that was causing the Token never to become "unused"... No excuses for this, except that Pthreads is partly responsible ;-) Tue Aug 22 11:36:58 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/ASX/Task: Changed the behavior of task so that it doesn't try to delete the Message_Queue or Thread_Manager if it didn't allocate them! Thanks to Karl-Heinz Dorn (kdorn@erlh.siemens.de) for suggesting this fix. * libsrc/ASX/Message_Block: Changed the semantics for Message_Block::end() so that it returns a pointer to 1 past the end of the data. This is more consistent with toolkits like STL. Also changed the behavior of Message_Block::copy() so that it checks to make sure the data will fit in its buffer. * tests and apps: Revised a bunch of files to add #ifdef so that TLI tests and apps are not compiled if the platform doesn't support it... * Fixed a bunch of minor problems for HP/UX (which lacks TLI and other common OS features). Thanks to Mark Seaborn (mseaborn@itthp1.comm.mot.com) for noticing these. Mon Aug 21 00:19:29 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Misc: Changed the name of the class Argument_Vector to ACE_ARGV. This is a bit more concise... UNIX programmer will know precisely what argv is... * Updated all of ACE to use the new naming scheme, which prepends all ACE classes with "ACE_". This is an important change since it prevents ACE from polluting the namespace of applications (unless they also prefix "ACE_" in front of their classes, which is not very likely!). Since this change basically affects every single file in the entire release, as well as all existing user code I've written a perl script called "rename-ace.pl" to automate all of this. This script is in $WRAPPER_ROOT/bin. To use it, simply type: % find . -type f -print | egrep '[Chi]$' | xargs rename-ace.pl Note that you will need to change the first line of rename-ace.pl to point it to whereever perl is located on your system. I've tested this on the entire ACE source code base and it seems to work fine. Please be careful using it on your code, however, since it may conflict with names that you use. When in doubt, remove the '-pi' from the first line of the rename-ace.pl perl script and replace it with '-p' (which is non-destructive). Then run the commands above and check the output carefully. When you're convinced that everything is ok, add the '-pi' back again. Let me know immediately if you find any problems with this scheme! * libsrc/Connection/Acceptor.C: Added a virtual destructor to the Oneshot_Acceptor to make sure that descriptors are closed down correctly. Thanks to Irfan (irfan@wuerl.wustl.edu) for suggesting this. * libsrc: Change all occurrences of Shared_Memory to SV_Shared_Memory to firmly indicate the origins of this wrapper... Sun Aug 20 23:12:03 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/IPC_SAP: added the IO_SAP, DEV_SAP, and FILE_SAP components donated by SIEMENS to the ACE release. * libsrc/ASX: Split the Message_Queue.* files into Message_Block.* and Message_Queue.* in anticipation of the Windows NT port... Fri Aug 18 13:54:09 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Threads/Thread_Specific: Move the operator->() method back into the *.C file in order to make HP/UX happy... * apps/Gateway/Peer: Removed the Options.* files since they weren't being used and they were causing problems on OSF/1... * libsrc/Misc/Profile_Timer: Factored common code together by making a new typedef called Rusage that defaults to either struct rusage or prusage_t, depending on installation flags. Fixed a couple places in the code that were depending on the prusage_t type (which is now the Profile_Timer::Rusage type...). Thu Aug 17 14:31:11 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Connection/Connector.h: Changed some typedefs in order to keep the Centerline compiler from crapping out. I can't *believe* how screwed up that compiler is when it comes to templates... * Released new version of ACE 3.2.9... * libsrc/Threads/Synch: Fixed a bunch of typos that showed up on OSF/1. Also tried to fix some other problems by removing "const" from all the methods... Wed Aug 16 22:26:24 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Threads/Thread_Specific.h: Fixed another stupid bug caused by a braino that failed to unconditionally include Thread_Specific.i. Stuart Powell found this also... (thanks!). * libsrc/Threads/Thread_Specific.h: In Thread_Specific.h the inlining macros were only included if threads were used. This obviously didn't work for people without threads... I moved the #endif for ACE_HAS_THREADS... back before the #ifdef __INLINE__ stuff (e.g. to line 71). Thanks to Stuart Powell (stuartp@ot.com.au) for suggesting this. * libsrc/Threads/Synch.h: Fixed a typo that manifested itself for pthreads: Condition count_nonzero_ should obviously be Condition count_nonzero_. Thanks to Rob Clairmont (rclairmo@bnr.ca) for reporting this. Tue Aug 15 00:31:44 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Log_Msg/Log_Msg.C (log): Fixed a stupid typo (*format++ should have been format++...). * libsrc/Misc/Trace.h: Move the class TSS_Int from within class Trace to file scope and changed the name to ACE_TSS_Int to handle problems with the HP/UX compiler. * include/ace/sysincludes.h: Added the word "struct" in front of rusage to make things work on HP/UX. Thanks to Neil Cohen (nbc@metsci.com) for reporting this fix. * apps/TokenServer/server/TokenMap.C: Fixed yet another problem with scope of variables defined in for loops... * Released new version of ACE 3.2.9... * libsrc/Connector: Fixed a braino whereby I didn't use consistent naming for my #defines (PA should have been PRC). Thanks to Alex (alexey@ace.elektra.ru) for noticing this. Mon Aug 14 18:13:46 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/IPC_SAP/SPIPE_Acceptor: Modified the interface of open() and accept() so they would conform to the SOCK_Acceptor and TLI_Acceptor. This makes it possible to use SPIPE_Acceptor in similar situations (e.g., Acceptor and Connector patterns). * libsrc/ASX/Stream: Fix a bug that occurred when trying to dump() a linked Stream. * libsrc/Connection/Acceptor: Moved the body of the init() method out of this class since it was unnecessarily dependent on the INET_Addr domain addressing types. This required changes to the ./apps and ./tests directory in order to add the init() method to classes that used the default behavior. * libsrc/IPC_SAP/SPIPE_SAP/SPIPE_Acceptor.C: Fixed close() so that it will call fdetach(2) *before* closing down the descriptor. I hope this will fix a problem noticed by people at SIEMENS. * tests/ASX/Event_Server/Event_Server/Options: Fixed a problem with the default port numbers (they weren't using the values from ./include/ace/testconfig.h). * include/ace/sysincludes.h (MAXNAMELEN): If MAXNAMELEN is not defined by a platform then ACE sets it to be FILENAME_MAX, which should be defined in stdio.h. Thanks to Todd Blanchard (tblancha@evolving.com) for this suggestion. Sun Aug 13 17:02:57 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Service_Configurator/Parse_Node: Changed the name of Function_Node::symbol (const void *) so that it won't give those annoying warnings anymore... * libsrc/Reactor/Handle_Set: Moved the definition of MSB_MASK from the header file into a static const within the .C file in order to avoid overflow problems on certain compilers. * libsrc/Threads/Synch: Implemented bare-bones versions of Semaphore and RW_Mutex for the POSIX Pthreads wrappers so that they'll be more compatible with the Solaris threads wrappers. The semaphore implementation uses a Condition object and a Mutex, which should be a reasonable solution. The RW_Mutex is a cop-out for now and just uses a Mutex (i.e., no extra parallelism for readers...). If anyone has a good implementation of RW_Mutex that they'd like to share please let me know. * libsrc/Threads/Thread_Specific: Fixed the prototypes for copy constructor and operator=, which were broken... Thanks to Alex (alexey@ace.elektra.ru) for noticing this. * libsrc/Shared_Malloc/Memory_Pool.C: Added some casts to MAP_FAILED to handle OSF/1. Thanks to Alex (alexey@ace.elektra.ru) for noticing this. * libsrc/Threads/Token: Fixed things so that threads waiting for a token wouldn't get screwed up by signals that occur... * include/ace/sysincludes.h: Changed the #ifdef ACE_SELECT_USES_LONG to ACE_SELECT_USES_INT for HP/UX since believe it or not, it really does use int, not long! * libsrc/SV_Semaphores: Fixed some weird problems that the HP/UX compiler was having when trying to inline methods in this class. As a consequence, I've rearranged the class to avoid inlining non-trivial methods. Thanks to John Morey (jmorey@hitel.com) for reporting these problems. Wed Aug 9 01:29:16 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Threads/Token: Added a tryacquire() method to become interface compliant with other LOCK mechanisms. Sat Aug 5 09:18:29 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * libsrc/Connection: Fixed a couple of bugs when using the Acceptor and Svc_Handler when ACE_OMIT_SERVICE_CONFIGURATOR is enabled. Thanks to Stuart Powell (stuartp@ot.com.au) for bringing this to my attention. * include/ace/sysincludes.h: Added a #ifdef for MAXNAMELEN to handle systems (like HP/UX) that don't support it. Thu Aug 3 22:59:13 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * Released new version of ACE 3.2.9... * libsrc/Reactor/Time_Value.i (normalize): Added new code to perform normalization of Time_Values. Thanks to Hans Rohnert (Hans.Rohnert@zfe.siemens.de) of SIEMENS for the suggestion. Tue Aug 1 00:19:00 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu) * Changed all code that used Log_Msg::log() directly to use LM_ERROR or LM_DEBUG. This will ensure that logging will work with the new thread-specific storage implementation