Fri Dec 23 01:50:50 1994 Douglas C. Schmidt (schmidt@tango) * libsrc/ASX: Changed the behavior of Map_Manager::Map_Manager() to allocate a default-sized buffer. * libsrc/Reactor/Reactor.C (dispatch): Made the poll-based Reactor smarter about detecting POLLERR error conditions. When POLLERR is detected, the Reactor now shutdown down that fd... Wed Dec 21 18:29:15 1994 Douglas C. Schmidt (schmidt@tango) * libsrc/IPC_SAP/SPIPE_SAP: Changed the name of class SPIPE_Msg to SPIPE_IO to reflect the fact that I/O over named pipes need not be message-oriented... * Changed all occurrences of {SOCK,TLI,SPIPE}_Listener to {SOCK,TLI,SPIPE}_Acceptor. This is a more accurate name for the function these classes perform. In addition, it is easier to explain in the context of the Acceptor and Connector patterns. Note that the *.h files are also changed, as well. * Changed the implementation of {SOCK,TLI,SPIPE}_SAP so that there is now a *_Connector class to go along with the *_Acceptor class. The *_Connector is a factory that produces *_Stream objects *actively*, in a similar way to how the *_Acceptor is a factory that produces *_Stream objects *passively*. This makes everything much more orthogonal, though it will break existing code... The easiest way to fix existing code is to do the following: 1. Find places in the code that define objects of type SOCK_Stream, LSOCK_Stream, TLI_Stream, or SPIPE_Msg (now called SPIPE_IO). 2. Replace #include "SOCK_Stream.h" with #include "SOCK_Connector.h" (or whatever C++ wrapper you have). 3. Replace definitions of the form: INET_Addr addr (port, host); SOCK_Stream foo (addr); with INET_Addr addr (port, host); SOCK_Stream foo; SOCK_Connector con (foo, addr); If you don't want to have an extra variable named "con", you can replace this with: INET_Addr addr (port, host); SOCK_Stream foo; SOCK_Connector (foo, addr); // Calls the constructor. Tue Dec 20 21:34:10 1994 Douglas C. Schmidt (schmidt@tango) * Renamed the ./{libsrc,tests}/{Semaphores,Message_Queues} directories to SV_Semaphores and SV_Message_Queues to better reflect their true behavior and in order to prevent clashes with the new ASX names. * libsrc/ASX: Renamed Queue to Task to better reflect its true functionality. In addition, renamed Message_List to Message_Queue. Mon Dec 19 23:04:52 1994 Douglas C. Schmidt (schmidt@tango) * Changed "private" to "protected" in ASX/Message_List.h at the request of Troy Warner (tnw1@core01.osi.com). Mon Dec 12 23:47:01 1994 Douglas C. Schmidt (schmidt@tango) * libsrc/IPC_SAP/SOCK_SAP: changed the name of the global utility function "bind_port()" to ace_bind_port() to avoid polluting the global symbol namespace. * Fixed a descriptor leak in SOCK_Dgram::shared_open() and SOCK_CODgram::shared_open(). The original version didn't automatically close down the socket descriptor if bind failed. The new version does close the descriptor down. Sat Dec 10 00:53:20 1994 Douglas C. Schmidt (schmidt@tango) * libsrc/Reactor/Reactor.C (mask_ops): Fixed a stupid bug... The test should have been if (this->invalid_handle (handle) || this->poll_handles_[handle].fd == -1) rather than: if (this->invalid_handle (handle) || this->poll_handles_[handle].fd != -1) * libsrc/Reactor/Reactor: Modified the semantics of Reactor::remove_handler() such that calling it with a value of Event_Handler::DONT_CALL or'd into the Reactor_Mask instructs the Reactor to remove the handler *without* calling the object's handle_close() method! Fri Dec 9 12:53:31 1994 Douglas C. Schmidt (schmidt@tango) * include/Synch: some C++ compilers (e.g., Centerline) barf when the see the following in an inline function: if (foo == bar) { errno = result; return -1; } result result; I fixed this by doing the following: if (foo == bar) { errno = result; result = -1; } result result; Wed Dec 7 22:23:47 1994 Douglas C. Schmidt (schmidt@tango) * include/Synch.h: Added additional methods in the Null_Mutex class in order to be consistent with the RW_Mutex interfaces... * libsrc/ASX/Message_List: Added new a set of methods called "try_enqueue_head" and "try_enqueue_tail" that will only insert a message into the queue if it is not already full. If it is full, return EWOULDBLOCK. Tue Dec 6 13:58:28 1994 Douglas C. Schmidt (schmidt@tango) * libsrc/Reactor/Event_Handler: added default values of -1 to the handle_input(), handle_output(), and handle_exception() methods. Mon Dec 5 23:30:28 1994 Douglas C. Schmidt (schmidt@tango) * libsrc/ASX/Message_List: Added a new method called set_length to Message_Block. This method sets the length of the "active" portion of the message. This is defined as the offset from RD_PTR to WR_PTR. Sat Dec 3 20:40:53 1994 Douglas C. Schmidt (schmidt@tango) * libsrc/Threads/Synch: Added two new class called Write_Guard and Read_Guard, which provide functionality a la the Guard class, only that they acquire and release readers/writer locks. * libsrc/Threads/Synch: For interface uniformity with other synchronization wrappers I added an acquire() method. This is implemented as a write-lock to be on the safe-side... Fri Dec 2 13:33:39 1994 Douglas C. Schmidt (schmidt@tango) * include/Synch.i (Mutex::tryacquire): Modified the behavior of Mutex::tryacquire so that it will return -1 and set errno to the appropriate return value of tryacquire(3T) if various types of "problems" occur (such as the Mutex already being held). * include/Message_List.i: Rearranged the order of the Message_Block::get_rd_ptr and Message_Block::set_wr_ptr methods to deal with inlining problems that some cfront-based C++ compilers have... * libsrc/Reactor/Signal.[hi]: Changed set_handler/get_handler to "handler" to avoid a collision with Rogue Wave libraries. This new version is more consistent with other usage in ACE anyhow... * Modified the behavior of Service_Config::Service_Config() so that it makes the initialize size of the Reactor be the same size as the Service_Repository. This was done at the suggestion of Bob Sayle and Steve Warwick at ARINC Research. Sun Nov 20 00:59:06 1994 Douglas C. Schmidt (schmidt@tango) * libsrc/ASX/Message_List: Added two new methods (is_full() and is_empty()) to the public interface of Message_List. These methods check whether the queue is full or empty *while holding the lock*. * libsrc/ASX/Queue.h: Made the svc() method a pure virtual function. This is much cleaner than not doing it, particularly when we've already got to define open(), close(), and put()... * Added a new method to the IPC_SAP/Addr inheritance hierarchy. The method is called addr_to_string() and it converts the address of a subclass (e.g., either UNIX domain or Internet domain) into a string. This functionality is particularly useful in parameterized types (such as Acceptor), which should be oblivious of the type of communication domain they are using... * Reorganized the ./apps/Logger/Service_Configurator_Logger directory in order to reuse more code. Now, all the Acceptor pattern classes have been moved to a new subdirectory called ./libsrc/Acceptor. In addition, this code has been generalized to work with the ASX framework! Sat Nov 19 15:19:19 1994 Douglas C. Schmidt (schmidt@tango) * Released version 2.15.5 (added a couple of minor fixes and some additional software to the release. In particular, I've added the RPC++ C++ wrappers for Sun RPC. See the README file for more info on this. * apps/Synch-Benchmarks: Reorganized all the synchronization tests so that they would be easier to understand and extend. * include/sysincludes.h (ACE_NONBLOCK): Fixed a stupid typo in the ./include/makeinclude/wrapper_macros.GNU file that accidentally used ACE_NONBLOCKING instead of ACE_NONBLOCK... Jaysus * Fixed up the Service_Config.[Chi] source so that it no longer allocates statically linked services via static variables. Stacy Mahlon (mcs@contour.mayo.edu) recommended this change to workaround bugs in compilers that fail to initialize static objects appropriately. Tue Nov 15 11:55:03 1994 Douglas C. Schmidt (schmidt@tango) * Fixed a portability problem in the ./libsrc/Service_Configurator that was caused by certain compilers failing to initialize global variables correctly. In particular, the Obstack object ace_obstack is now a pointer that is allocated dynamically by Service_Config.process_directive(). Thanks to Stacy Mahlon (mcs@contour.mayo.edu) for noticing this! Mon Nov 14 12:16:14 1994 Douglas C. Schmidt (schmidt@tango) * libsrc/Threads/Thread.h: added C++ wrappers for thr_getconcurrency() and thr_setconcurrency(). * Fixed a dumb typo in ./tests/IPC_SAP/SOCK_SAP/CPP-nbclient.C that failed to conditionally compile for different variants of siginfo... * Added some test programs that benchmark the performance of Solaris synchronization mechanisms. See ./apps/Synch-Benchmarks for details... * Extended the methods of the Queue class to take advantage of the new Message_List methods that perform timed waits! This involves changing many of the existing methods in this class to add an extra parameter of type timestruc_t *, which defaults to 0. * Added some new comments in the ./include/makeinclude/wrapper_macros.GNU file that indicate what the various macros defined by the Makefile scheme actually mean. This should help people who are porting to a new system... * Fixed a dumb bug in ./tests/Shared_Memory that directly included system header files. Everything in ACE should include "sysincludes.h" instead... Thanks to Stacy Mahlon (mcs@contour.mayo.edu) for noticing this! * include/Memory_Pool.i (round_up): Fixed a typo where PAGESIZE should have been ACE_PAGE_SIZE. Sat Nov 12 01:32:52 1994 Douglas C. Schmidt (schmidt@tango) * Generalized the Shared_Memory_Pool class for Malloc so that it doesn't require the base addresses for multiple processes to all start at the same location. * libsrc/Service_Configurator/Thread_Spawn.i (Thread_Spawn): Fixed a stupid bug in the constructor. Note that we should be checking if this->tm_ == 0, rather than != 0... Fri Nov 11 00:11:41 1994 Douglas C. Schmidt (schmidt@tango) * Released version 2.15.4 (added a couple of minor fixes). * Added a new test program in the ./tests/ASX/Message_List directory. This program illustrates how thread-safe Message_Lists work using ASX. * libsrc/Threads/Thr_Manager.i: Added a new method called insert_thr() to Thr_Manager that is used in conjunction with Thr_Cntl::Thr_Cntl to make sure that a thread is added to the Thr_Manager's table correctly. Thu Nov 10 20:14:11 1994 Douglas C. Schmidt (schmidt@tango) * libsrc/Log_Msg/Log_Record.C (print): Fixed the following very subtle (and very stupid) bug: return ::fprintf (fp, this->msg_data_); if this->msg_data_ contains '%', then this call will fail since fprintf tries to treat the percent sign as a format code. The obvious fix is: return ::fprintf (fp, "%s", this->msg_data_); * libsrc/ASX/Message_List.i (is_empty): Fixed a braino that failed to check if there was a 0-sized buffer in the list. It is now possible to enqueue a 0-sized buffer, which is helpful for things like signaling end of transmission by a producer. * libsrc/ASX/Message_List.C: Improved the robustness of the Message_List abstraction by detecting the case where the newly inserted Message_Block is a NULL pointer. Before, this would crash the program, where now it returns -1 from the enqueue_head() or enqueue_tail() methods. * libsrc/Threads/Synch.h: added timedwait_signal() and timedwait() methods to class Condition. These are wrappers around the cond_t cond_timedwait() function. * Improved the documentation of the class interfaces in the Synch.h C++ wrapper for Solaris 2.x threads mechanisms. * Changed the name of class Condition methods wait_signal() and timedwait_signal() to wait_alert() and timedwait_alert() to remove confusion with UNIX signals and the regular condition variable signal. Wed Nov 9 23:49:24 1994 Douglas C. Schmidt (schmidt@tango) * libsrc/IPC_SAP/Addr/UNIX_Addr.i (UNIX_Addr): Fixed another couple brainos in UNIX_Addr.i (thanks for Irfan (ip1@cs.wustl.edu) for noticing this). * libsrc/IPC_SAP/SOCK_SAP/SOCK.i (get_local_addr): Fixed a braino that didn't reset the Addr size after a call to getsockname(). Tue Nov 8 00:25:02 1994 Douglas C. Schmidt (schmidt@tango) * libsrc/Service_Configurator/Svc_Conf.y (create_service_type): Fixed a bug on lines 323 and 324, and 330 and 331. The "#if defined" needs to be INSIDE the "case" statements. Thanks to mcs@contour.mayo.edu for finding this! * Improved the interfaces for all the synchronization wrappers so that they can be given all the parameters for the underlying SunOS 5.x *_init calls. Default values are given to keep the normal usage concise... Mon Nov 7 21:41:13 1994 Douglas C. Schmidt (schmidt@tango) * Changed all occurrences of Mutex_Rec to Recursive_Lock. This is much more descriptive since by using templates, the recursive logic applies to a number of synchronization mechanisms (e.g., Semaphores, RW_Mutex, Mutex, Null_Mutex, etc.) rather than just the Mutex class. * Changed all occurrences of Mutex_Block to Guard. This is more standard terminology and reflects Booch's terms more closely, as well. Sun Nov 6 14:31:44 1994 Douglas C. Schmidt (schmidt@tango) * Majorly improved the modularity and structure of the Reactor class. Much duplicate code has been coalesced and several new features have been added. * Changed the name of the Reactor method set_ready() to ready_ops(). Added a new method called mask_ops(). These methods make it possible to manipulate the "dispatch masks" and the "ready masks" (e.g., READ_MASK, WRITE_MASK, etc.) at a much finer level of granularity without loss of efficiency or correctness. Sat Nov 5 16:48:55 1994 Douglas C. Schmidt (schmidt@tango) * Changed the name of three methods in the Semaphore class to mirror the terms used for Mutex and RW_Mutex. This will help support the use of semaphores along with templates (e.g., Rec_Lock) much better... The old names were "wait", "trywait", and "signal". The new names are "acquire", "tryacquire", and "release." * Added a new class called Signal_Block in Signal.[hiC] This class operates similar to Mutex_Block, in that it holds a set of signals over the duration of a C++ statement block. The constructor masks out the signals and the destructor restores the signals. * Changed the name of files Signal_Handler.[hiC] to Signal.[hiC] to reflect a broadening of the functionality of the ACE wrappers for Signals. For example, the new C++ classes wrap the sigset_t API, as well as the struct sigaction structure. Fri Nov 4 00:41:48 1994 Douglas C. Schmidt (schmidt@tango) * Yow, got the new Shared_Malloc/Malloc class to work correctly on SunOS 4.x, as well as SunOS 5.x. It's a bit more clunky on SunOS 4.x since we have to use System V semaphores rather than Solaris synchronization mechanisms. However, it now seems to function correctly! * Added a new method called "tryacquire" to Semaphore_Complex and Semaphore_Simple. This method provides the same "non-blocking" semantics as it does in the Mutex, Semaphore, and RW_Mutex classes. * Added a new method called "remove()" to all the C++ wrappers in the Synch.[hi] file. This improves the symmetry with the System V semaphore wrappers, and also gets around a nasty bug with cfront 3.x and its handling of templates and explicitly called destructors... * Added a new C++ wrapper class for Threads (Thread.h). The eventual purpose of this class is to hide the differences between POSIX pthreads and Solaris threads. * Added new parameters to Thr_Manager::spawn to enable the stack and stack_size to be passed in. * Modified the Synch.h file so that the Null_Mutex and Mutex_Block classes will both be compiled, even if we are building ACE on a platform that doesn't support threads! * Added a timed event-loop method to the public interface of the Service_Config class. This basically forwards the request to the underlying Reactor->handle_events method. Thanks to Brad Needham (bneedham@arinc.com) of ARINC research for the suggestion! Wed Nov 2 14:47:25 1994 Douglas C. Schmidt (schmidt@tango) * Changed the interface for one of the Reactor's {register,remove}_handler methods. These methods had previously taken a sigset_t &, but for some reason the Sun C++ 3.0 compiler can't seem to recognize that this is different from an int! Therefore, I changed the interface to take a sigset_t *. * Fixed some portability bugs that crept into the SunOS 4 version of ACE, particularly with the siginfo_t extended signal handler stuff. Tue Nov 1 21:46:07 1994 Douglas C. Schmidt (schmidt@tango) * libsrc/Log_Msg/Log_Msg.C (log): Fixed a braino on line 175. "int sig" was undefined outside the conditional (duhhh ;-)). Thu Oct 27 17:23:37 1994 Douglas C. Schmidt (schmidt@tango) * Fixed up some problems with Semaphore_Complex and Semaphore_Simple. The new design should be more functional, particularly for Semaphore_Complex, which now generalizes to arrays of semaphores. Wed Oct 26 16:38:42 1994 Douglas C. Schmidt (schmidt@tango) * libsrc/Shared_Malloc/: Created a .i file for Malloc and Memory_Pool to handle inlines. * Fixed a fence-post error in Mem_Map::map_it(). The new version should correctly set the length of the file *and* also do the appropriate memory mapping. * bin/clone.C: Fixed the clone program so that it now compiles with the C++ compiler rather than the C compiler. Tue Oct 11 20:01:16 1994 Douglas C. Schmidt (schmidt@tango) * libsrc/Reactor/Reactor.h (Reactor): Changed the order of the arguments to the Reactor's register_handler() method used to register signal handler objects. The new order puts both "new" components first, and any (optional) old components following this. This is a more natural set of default values... * libsrc/Shared_Malloc: split out the Local and Shared memory pools for class Malloc into the Memory_Pool.[hC] files. Mon Oct 10 22:54:53 1994 Douglas C. Schmidt (schmidt@tango) * libsrc/Threads/Synch.i: Reworked the Thread_Mutex and Process_Mutex classes to inherit their interface and implementation code from Mutex... Thanks to Irfan Payrali for the suggestion! Wed Sep 28 11:26:34 1994 Douglas C. Schmidt (schmidt@tango) * Moved some of the tests directories around to better reflect precisely which ACE components are being tested. In particular, the {client,server} directories that were originally under the ./tests/Reactor subtree are now located in the ./tests/Service_Configurator subtree. Tue Sep 27 23:05:32 1994 Douglas C. Schmidt (schmidt@tango) * Added a bunch of constructors/destructors for ./tests/Reactor/server to make g++ happy. * libsrc/Service_Configurator/Service_Object.[ih] (Service_Object): Added a constructor and destructor to Service_Object to make g++ happy. Also, removed the #if for broken versions of g++ 2.5.8. * include/Reactor: Added a constructor and destructor for Null_Callback to make G++ happy... * libsrc/Message_Queues/: Added support for G++ templates. * Changed the handling of _sys_siglist in the sysincludes.h file to try and handle the weird SunOS 4 header file problems... * libsrc/IPC_SAP/SOCK_SAP/SOCK_Dgram_Brdcast.C (mk_broadcast): Removed the "struct" from new struct ifnode in order to compile... Tue Sep 20 11:17:23 1994 Douglas C. Schmidt (schmidt@tango) * Fixed a couple of minor typos in the Windows NT C++ wrappers for sockets. * Released version 2.15.2 so that Mark Frutig could have access to the latest source in order to write man pages! Thu Sep 15 20:47:36 1994 Douglas C. Schmidt (schmidt@tango) * Extended the Event_Handler interface to support the additional siginfo_t-style parameters for extended SVR4 signal handling. Note that for backwards compatibility, this new interface only enabled if the -DACE_HAS_SIGINFO flag is set in the wrapper_macros.GNU config file. Making this change affected several of the existing ACE classes such as Service_Config and Signal_Handler. Mon Sep 12 17:07:10 1994 Douglas C. Schmidt (schmidt@tango) * Improved the modularity of the Reactor by creating a new class called Signal_Handler. This new class basically encapsulates the signal handling mechanism provided by UNIX within a nice OO abstraction. The new arrangement is particularly useful since the Signal_Handler class may be used in applications (e.g., the Malloc class abstraction) that do not require the other features of the Reactor. Sun Sep 11 14:40:06 1994 Douglas C. Schmidt (schmidt@tango) * Changed the default value for Semaphore_Simple and Semaphore_Complex from OPEN to CREATE. This is more closely related to how SunOS thread synchronization variables work. * Changed the methods of the Semaphore_Simple class to be syntactically equivalent to the Process_Mutex and Thread_Mutex classes. This makes it easier to write code that uses parameterized types to instantiate the appropriate type of synchronization primitive. * include/makeinclude/rules.local.GNU (OBJDIRS): Fixed the "depend" target so that it generates the correct dependencies for remaking .so files after they are changed. * Added a new pair of methods to the Reactor so that it is now possible to register/remove a sigset_t of signals in one operation. Sat Sep 10 03:11:34 1994 Douglas C. Schmidt (schmidt@tango) * libsrc/Mem_Map/Mem_Map.i (map_it): Fixed a few minor bugs with how the Mem_Map::map() method handles lseek()'s. * Changed the name of the Mem_Map::open() methods to Mem_Map::map(). This seems like a more reasonable name! Also, removed the close() method. This is trivial to implement via ::close (mmap.get_fd ()); Fri Sep 9 22:04:25 1994 Douglas C. Schmidt (schmidt@tango) * Provided a new implementation of a flexible memory allocation scheme (Shared_Malloc/Malloc.[HiC]). This memory allocation can be parameterized by the following: 1. The pool from which memory is allocated (e.g., local memory vs. shared memory). 2. The type of synchronization used when allocating the memory (e.g., no synchronization, thread-based synchronization, process-based synchronization). * libsrc/Threads/Synch.i (Proc_Mutex): Added new classes to the Synchronization library. These classes are wrappers around the USYNC_PROCESS and USYNC_THREAD flags to mutex_init(). Wed Sep 7 20:29:00 1994 Douglas C. Schmidt (schmidt@tango) * include/sysincludes.h (MT): Added check to see if _REENTRANT was already defined, and if so, avoid redefining it! Sun Sep 4 16:23:17 1994 Douglas C. Schmidt (schmidt@tango) * Released version 2.15.1 to the world... * Added support for the Windows NT version of SOCK_SAP. * Fixed a few minor bugs involved with the order of linking libraries. * Fixed an oversight in ./testsReactor/server/server_test.C where I was still including the "Server_Test.h" file (ugh). Wed Aug 31 13:27:10 1994 Douglas C. Schmidt (schmidt@tango) * libsrc/IPC_SAP/SOCK_SAP/SOCK_Stream.C (open): Fixed a bug whereby the I/O descriptor wasn't being closed if connect() failed. Thanks to Charles Eads (eads@synoptics.com) for reporting this. * Recompiled everything on SunOS 4.x using SunC++ 3.x and SunOS 5.x using SunC++ 3.x and 4.x. Everything seems to compile fine now. * Released version 2.15 Mon Aug 29 00:14:04 1994 Douglas C. Schmidt (schmidt@tango) * Finished up a preliminary set of tests for ASX. See the $WRAPPER_ROOT/tests/ASX/Event_Server directory for more details. * wrapper_macros.GNU (CC): Removed the ARCHFLAG from the CCFLAGS macro in the Makefile system. Henceforth, all conditional compilation should be performed on a "per-feature" basis, rather than a "per-platform" basis... * libsrc/IPC_SAP/SOCK_SAP/SOCK_Dgram_Brdcast.C (send): Automatically convert the port number to htons format before using it to initialize the sin_port field of the addressing structure. This is consistent with the behavior of other parts of IPC_SAP (particularly INET_Addr::set()). Sun Aug 28 00:02:53 1994 Douglas C. Schmidt (schmidt@tango) * Changed version number of 2.15 to reflect all the major modifications to the structure of ACE. * include/sysincludes.h: Started to fix up the conditional compilation scheme to be much smarter about the features that are available from both the compiler and the OS environment. * Added a fix suggested by Leslee Xu (lxu@ics.uci.edu) to better handle the normalization of Timer_Values. * Continued to make ACE coding conventions more consistent by removing get_/set_ prefix from all the accessor/manipulator methods. Also, added an underbar at the end of all class and object instance variables. Sat Aug 27 20:28:13 1994 Douglas C. Schmidt (schmidt@tango) * Continued to improve error handling by replacing all uses of perror with the Log_Msg macros. * include/sysincludes.h: Continued to improve the namespace utilization in ACE by prefixing stand-along Misc functions with ace_. * include/FD_Set.h: Changed the name FD_Set_Iter to FD_Set_Iterator. * typedef'd int to HANDLE in Event_Handler.h in preparation for merging in the Windows NT support along with the regular ACE package. I need to update all the other code in the entire release to be consist with this! Thu Aug 25 19:49:57 1994 Douglas C. Schmidt (schmidt@tango) * Fixed a bug with Thr_Manager.i that occurred if a thread created by ::thr_create() exits prior to the acquisition of the lock and the subsequent bookkeeping. Wed Aug 24 17:34:49 1994 Douglas C. Schmidt (schmidt@tango) * Updated SOCK_Dgram_Brdcast to return the average number of bytes sent. This isn't necessarily the most useful info, but it doesn't hurt either. Thanks to Mark Frutig (mfrutig@fnbc.com) for the suggestion. Mon Aug 22 01:18:14 1994 Douglas C. Schmidt (schmidt@tango) * Added a new test for the Service Configurator framework. This test illustrates the dynamic configuration of an entire stream of Modules. Sun Aug 21 03:16:00 1994 Douglas C. Schmidt (schmidt@tango) * Cleaned up the ./tests/Reactor/server example to be more robust. In particular, it doesn't really make sense to have the same object be configured both statically and dynamically *at the same time*! This was causing problems since each constructor was getting called twice for the same object -- once when it was created statically, and again when it was linked in dynamically... Things work much better now. Sat Aug 20 01:07:24 1994 Douglas C. Schmidt (schmidt@tango) * Heavily revised the structure of the ./apps/Logger subdirectories to test out the new Makefile scheme. Everything is working fine on Solaris! * Updated all the ./apps/Logger subdirectories to use the Acceptor name rather than the Client_Listener name. This is consistent with recent papers... * Fixed all the Makefiles to utilize the new simplified build strategy. The Makefiles are *far* more automated now! * Added support to all the libsrc Makefiles to produce both shared libraries (*.so) and traditional archives (*.a). Fri Aug 19 16:13:42 1994 Douglas C. Schmidt (schmidt@tango) * Majorly improved the Makefile support for building shared objects that will be dynamically linked explicitly. No longer will we have to do the horrible hack of compiling all the source code using -pic. Instead, only that code that will be linked dynamically must be compiled with -pic! Note that this only works if the shared object is entirely self contained (i.e., it does *not* reference any statically linked symbols that are not defined in itself)! * Started to add changes to the source code to make its configation driven by features rather than by OS. This should make everything much more portable soon! * Fixed IPC_SAP.h so that the constructor is protected (prevents accidental definition of an instance of this class). Thu Aug 11 08:31:33 1994 Douglas C. Schmidt (schmidt at valentine.ics.uci.edu) * Fixed Reactor::schedule_timer() so that it will unblock the Reactor if it is currently blocked. This is necessary so that the Reactor will recompute the amount of time that it needs to wait before dispatching timer-based events. Thanks to Todd Hoff for noticing this... * Fixed a stupid bug in the handle_input() method of Client_Listener in both the Reactor and Service_Configurator version of the Server Logging Daemon. This routine was not explicitly returning 0 when it worked..., which might cause the Reactor to deregister the listener handler! * Added casts to the ::select() call in the Reactor to ensure that the FD_Set * -> fd_set * conversion operators are properly involved. Thanks to Todd Hoff for this fix (thm@ictv.com). Todd noticed that the DCE pthreads implementation on AIX was confusing the compiler... Mon Aug 8 18:11:03 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Added a new constructor for the FD_Set class that will convert an fd_set into an FD_Set. * Removed the default value for the Service_Repository constructor since this was ambiguous with the default constructor. Tue Aug 2 18:25:28 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Fixed a bunch of minor "warning-causing" nits that were caused by #endif __INLINE__ in certain header files... * Added a new set of interfaces to the Reactor to retrieve a registered handler. These interfaces are also useful for checking whether a handler is registered at a particular fd. Sun Jul 10 17:43:19 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Improved the implementation of the Profile_Timer and High_Res_Timer classes. In particular, the High_Res_Timer class now works quite nicely using SunC++ 4.0. Mon Jul 4 12:49:14 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Changed the order of the base class inheritance list for the Service_Object class as a workaround for a bug in SunC++ 4.0's handling of pointers to member functions (ugh). Sun Jul 3 18:07:16 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Added a bunch of changes (courtesy of george@truffula.fp.trw.com). These changes fix minor portability problems with the new SunC++ 4.0 compiler. Fri Jun 24 08:59:02 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Removed operator() from all the IPC_SAP listener classes. Defining this operator was causing more trouble than it is worth since C++ doesn't allow operator() to have default arguments (ugh). The "right" thing to do is to simply use the accept() method in those classes instead of operator(). Wed Jun 22 16:54:05 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Fixed some problems with TLI_Listener that involved lax scoping of nested classes with cfront 3.x-based C++ compilers. Tue Jun 14 11:56:56 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Added a bunch of changes to get portions of ACE up and running on SCO UNIX, on HP-UX, and on OSF/1. Tue Jun 7 14:32:50 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Added support for FLEX's <> symbol to properly cleanup when a configuration file has been parsed by the Service Configurator's lexer/parser. Sun May 22 10:37:14 1994 Douglas C. Schmidt (schmidt at valentine.ics.uci.edu) * Modified the semantics of explicit dynamic linking on SunOS 4.x. Now, if there is no _init or _fini function defined in a shared library, it isn't an error (we simply don't call the function!). Mon May 9 07:58:35 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Included more fixes for GNU G++ courtesy of Aniruddha Gokhale . Thu May 5 16:47:25 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Reimplemented the ./apps/Logger/Reactor_Logger to provide an illustration of how the Reactor works. * Added finishing touches to the new version of the Service Configurator framework. This framework now permits completely automated configuration and reconfiguration of Service_Objects and Streams. The next step is to add some more complete examples that illustrate how these features are used... Tue May 3 10:17:12 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Fixed a bug in the Service Repository that would cause an extraneous dlclose on a shared library handle under some circumstances... Mon May 2 11:07:52 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Modified the semantics of Service_Object_Type in the Service Configurator framework so that it does not automagically register the service object with the instance of the Reactor. The original behavior involved too much "over-specification" of the behavior of Service Objects. Moreover, I can finally omit the crazy semantics of DONT_REGISTER_SVC and REGISTER_SVC! * Fixed some subtle bugs involved with pop'ing a remove'ing a Module from a Stream. Note that we need to use Module::link rather than Module::set_next in order to ensure that all the necessary pointers get rearranged.... * Fixed a couple of minor problems with deleting const objects in the Service_Repository.i file. These were caught by G++, but not caught by SunC++! Sun May 1 11:43:52 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Fixed subtle bug in Server_Config::run_event_loop(). This bug prevented reconfiguration from occurring under certain circumstances. * Added a new feature to the Service_Manager class in the Service Configurator framework. This new feature enables the Service Configurator to be reconfigured remotely by clients. * Fixed a bug in Service_Manager that caused the Service Configurator to crash if SIGPIPE occurred if a client closed down ungracefully while retrieving information on active services. * Added a new argument to the Reactor::register_handler() method that is used to register signal handling Event_Handlers. This new argument returns the current Event_Handler (if any) that is registered for this signal. * Fixed a potential bug in Service_Config::process_directives that behaved improperly when there was no svc.conf file present in a directory. Wed Apr 27 12:55:46 1994 Douglas C. Schmidt (schmidt at mabillon.ics.uci.edu) * Changed the name of Service_Directory to Service_Manager to reflect its intended functionality Mon Apr 25 10:53:01 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Updated the Service Configurator framework to use the new signal handling facilities provided by the Reactor. This cleans up a lot of the code in Service_Config.i and removes the need for ugly non-reentrant static class variables. * Released version 2.14 Sat Apr 23 14:29:11 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Changed the representation of the select()-based Reactor to be more similar with the poll()-based Reactor. In particular, there is only one array of Event_Handlers rather than three... Sun Mar 13 16:49:59 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Fixed a bug with the select-based version of the Reactor. This bug caused problems when dispatching the handle_output() member function. * Fixed a bug with the select-based version of the Reactor. This bug resulted in a failure to call the handle_close() member function on the write_fds and except_fds. * Changed the interface for Event_Handler::handle_close() so that the second parameter is a Reactor_Mask. This allows the call-back routine to determine which side of a connection (i.e., read-side vs. write-side or both) to close down. Be careful since this change may break existing code that used the original 1 argument handle_close() member function. * Changed the location of the Reactor_Mask. It was originally an enum in Reactor.h. It is now a typedef in Event_Handler. This change will break existing code but it easily spotted since the compiler will give an error! Sat Mar 12 15:16:59 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Continued to modify the grammar of the svc.conf file language. The latest version (illustrated in configuration files in the ./tests/Reactor/server and ./apps/Logger/Service_Configurator_Logger file) is both easier to read and to parse automatically. Tue Mar 8 10:19:40 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Changed the behavior of the Get_Opt class so that it will perform option processing starting from argv[0] rather than argv[1] if the SKIP argument to the constructor is set to 0. Note that the default value is 1, so the behavior is the same for backwards compatibility. Incidentally, this new change is necessary to support the Service Configurator stuff... * Changed the names of some of the Service_Record member functions to conform to the new idiom for naming get/set-style of member function accessors... Sun Mar 6 12:47:03 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Removed libGet_Opt.a and merged it in with libMisc.a Sat Mar 5 18:37:43 1994 Douglas C. Schmidt (schmidt at tango.ics.uci.edu) * Updated the Service_Config class to use a flex/yacc based parser rather than an ad hoc parser and lexer. This is useful since the new syntax for configuring a complete Stream into a Service Configurator-based application is more complicated... * Made a small change to the syntax of a svc.conf file. Now any parameters that are passed to the Service_Object::init() member function of a dynamically linked service must be enclosed inside of double quotes. In other words, service config entries such as dynamic ./dev_adapter.so:_alloc () Device_Adapter -p 3000 now become dynamic ./dev_adapter.so:_alloc () Device_Adapter "-p 3000" This change makes it easier to parse the input using flex/yacc. Sat Feb 12 18:53:14 1994 Douglas C. Schmidt (schmidt@net4.ics.uci.edu) * Modified the Reactor so that it now also demultiplexes signals, as well as timer events and I/O events. This required making a few sections of the Reactor code signal-safe, as well as thread-safe. * Changing the Reactor to handle signals also required a slight change to its interface. For example, it is now mandatory to give the Event_Handler::{READ_MASK,WRITE_MASK,EXCEPT_MASK} when registering a handler... Sat Feb 5 12:10:53 1994 Douglas C. Schmidt (schmidt@net4.ics.uci.edu) * Changed the Condition and Monitor classes to use templates that parameterize them with the appropriate type of Mutex (i.e., either Mutex or Mutex_Rec). This greatly cleans up the code... Made a number of changes in other files (such as the Reactor) to account for the changes. * Added a new class called Mutex_Rec which implements a recursive Mutex abstraction on SunOS 5.x. Recursive Mutexes may be acquired multiple times from a single thread. Basically, this supports an efficient and clean way of handling nested locking conditions. Thu Feb 3 12:37:34 1994 Douglas C. Schmidt (schmidt@net4.ics.uci.edu) * Fixed a bug in Service_Config.i that was causing SIGHUP-driven reconfiguration not to work correctly. * Added a set of new member functions to the Reactor class to suspend() and resume() an event handler. Also added suspend() and resume() member functions to the Server_Object class to take advantage of these new facilities automagically... Mon Jan 31 09:47:06 1994 Douglas C. Schmidt (schmidt@net4.ics.uci.edu) * Modified the no-args constructor for the Reactor to initialize it to the DEFAULT_SIZE. The prior behavior was *not* to initialize it at all, which seems rather dumb in retrospect... * Improved the Reactor's support for multi-threading by adding a pipe() call that is used to force the Reactor to reconfigure itself everytime a new handler is registered or removed. Previously, any new changes wouldn't take place until the Reactor was triggered by some external event. This old behavior was too non-deterministic... Sun Jan 2 12:35:39 1994 Douglas C. Schmidt (schmidt@net4.ics.uci.edu) * Modified the inheritance hierarchy for Service_Object so that it derives from both Shared_Object and Event_Handler. Shared_Object is a new abstract base class the provides an interface for dynamic linking of objects. When RTTI is widely available for C++ the Service Configurator will be much more functional since we can automatically figure out whether an object is a Service_Object or just a Shared_Object and do the right thing with it!