diff options
author | schmidt <douglascraigschmidt@users.noreply.github.com> | 1996-12-28 19:31:56 +0000 |
---|---|---|
committer | schmidt <douglascraigschmidt@users.noreply.github.com> | 1996-12-28 19:31:56 +0000 |
commit | 5e39b74c3bf1739e08286d6bfd082e387333b2de (patch) | |
tree | 6bec337fb3d2ce44aff3a4d61d87ae6f4a352146 | |
parent | 907accd3ebb62e786a06a83c419b22380b209385 (diff) | |
download | ATCD-5e39b74c3bf1739e08286d6bfd082e387333b2de.tar.gz |
foo
-rw-r--r-- | ACE-INSTALL.html | 230 | ||||
-rw-r--r-- | ChangeLog-96b | 11 | ||||
-rw-r--r-- | ace/Module.h | 20 | ||||
-rw-r--r-- | ace/OS.cpp | 2 | ||||
-rw-r--r-- | ace/Parse_Node.h | 1 | ||||
-rw-r--r-- | ace/Service_Record.cpp | 27 | ||||
-rw-r--r-- | ace/Service_Record.h | 1 | ||||
-rw-r--r-- | ace/Stream.cpp | 25 | ||||
-rw-r--r-- | examples/Threads/task_two.cpp | 10 | ||||
-rw-r--r-- | netsvcs/ACE-netsvcs.html | 5 |
10 files changed, 263 insertions, 69 deletions
diff --git a/ACE-INSTALL.html b/ACE-INSTALL.html index d7ed01e12cc..caa72aabed4 100644 --- a/ACE-INSTALL.html +++ b/ACE-INSTALL.html @@ -2,7 +2,7 @@ <!-- $Id$ --> <HEAD> -<TITLE>Installing ACE</TITLE> +<TITLE>Building and Installing ACE and Its Network Services</TITLE> <BODY text = "#000000" link="#000fff" @@ -10,22 +10,23 @@ vlink="#ff0f0f" bgcolor="#ffffff"> <HR> -<H3>Installation Notes for the ADAPTIVE Communication Environment (ACE)</H3> +<H3>Building and Installing ACE and Its Network Services</H3> <H4>Synopsis</H4> -The file explains how to build ACE on the various UNIX and Win32 -platforms that it has been ported to. Please make sure you read the -ACE <A HREF="ACE.FAQ.html">FAQ</A> before installing ACE. In -addition, please consult the <A HREF="ChangeLog">ChangeLog</A> file to -see whether any recent changes to the release will affect your code. +The file explains how to build and install ACE and its Network +Services on the various OS platforms and compilers that it has been +ported to. Please consult the <A HREF="ChangeLog">ChangeLog</A> file +to see whether any recent changes to the release will affect your +code. In addition, you might want to read the ACE <A +HREF="ACE.FAQ.html">FAQ</A> before building and installing ACE. <H4>Document Index</H4> <UL> <LI><A HREF="#platforms">Supported Platforms and Compilers</A> -<LI><A HREF="#unix">Installation Process for UNIX</A> -<LI><A HREF="#win32">Installation Process for Win32</A> +<LI><A HREF="#aceinstall">Building and Installing ACE</A> +<LI><A HREF="#svcsinstall">Building and Installing ACE Network Services</A> <LI><A HREF="#advanced">Advanced Topics</A> </UL> @@ -34,9 +35,13 @@ see whether any recent changes to the release will affect your code. <H3>Supported Platforms and Compilers</H3> The ADAPTIVE Communication Environment has been ported and tested -extensively on a wide range of C++ compilers and OS platforms. If you +extensively on a wide range of C++ compilers and uni-processor and +multi-process OS platforms including Win32 (i.e., WinNT and Win95), +most versions of UNIX (e.g., SunOS 4.x and 5.x, SGI IRIX, HP-UX, +OSF/1, AIX, Linux, and SCO), VxWorks, and MVS OpenEdition. If you have a problem compiling the ACE wrappers on the platforms shown below -please let me know and I'll try to fix it for you. +please send email to the <A HREF="mailto:ace-users@cs.wustl.edu">ACE +mailing list</A> and we'll try to fix it for you. <DL> <DT> <B>Win32 (Windows NT and Windows '95) </B><P> @@ -176,12 +181,19 @@ If you use the GNU GCC C++ compiler please note the following: <P> </UL> <P><HR><P> + +<A NAME="aceinstall"> +<H3>Building and Installing ACE</H3> + +The following explains how to build the ACE on <A +HREF="#unixsvcs">UNIX</A> and <A HREF="#win32svcs">Win32</A>. + <A NAME="unix"> -<H3>Installation Process for UNIX</H3> +<H4>Building and Installing ACE on UNIX</H3> -The installation process for installing ACE on UNIX is relatively -simple (the Windows NT installation process is different). Here's -what you need to do: <P> +Building and installing ACE on UNIX is relatively simple (the <A +HREF="#win32">process</A> for Win32 is different). Here's what you +need to do: <P> <OL> <LI> Install GNU make 3.7 or greater on your system (available via @@ -223,8 +235,8 @@ what you need to do: <P> <LI> Note that since ACE builds shared libraries, you'll need to set LD_LIBRARY_PATH to whereever you put the binary version of the - libraries. For example, you probably want to do somethink like the - following <P> + ACE library. For example, you probably want to do something like + the following <P> <pre><code> % setenv LD_LIBRARY_PATH $WRAPPER_ROOT/ace:$LD_LIBRARY_PATH <P> @@ -243,10 +255,10 @@ what you need to do: <P> <P><HR><P> <A NAME="win32"> -<H3>Installation Process for Windows NT and Windows '95 Static and Dynamic Libraries</H3> +<H4>Building and Installing ACE on Win32</H3> -The installation process for NT is a bit different than UNIX. First, -I assume you're using MSVC++ 4.0(things are a little different for the +The installation process for NT is a bit different than UNIX. We +assume you're using MSVC++ 4.x (things are a little different for the 2.0 version...). <P> <UL> @@ -324,10 +336,10 @@ I assume you're using MSVC++ 4.0(things are a little different for the applications link setup. Do this by including wsock32.lib in the project through Insert/Files_into_project. <P> - When building a DLL: In order to allow standard C library functions + When building a DLL we must ensure that both dll and exe are using + the same libraries In order to allow standard C library functions to share common variables (particular <TT>errno</TT>) across dll - and exe boundaries, we must ensure that both dll and exe are using - the same libraries. Go to + and exe boundaries. Go to Build/Settings/C++/Category:Code_Generation. Set Use run-time library to "Multithreaded DLL" or "Debug Multithreaded DLL" depending on whether you're building a release or a debug version @@ -342,16 +354,12 @@ I assume you're using MSVC++ 4.0(things are a little different for the Go to the Build menu and select "Build ace.{lib,dll}". The first time this happens it will rebuild all the dependencies. This may take a while (i.e., 3 to 15 minutes, depending on whether you use - Samba, PC-NFS, native NTFS, etc.). The whole process will seem to - generate lots of errors and warning about not finding many UNIX - header files, etc. Just ignore these errors/warnings. They are - due to the lame MSVC++ compiler that doesn't pay attention to the - #ifdefs when computing the dependencies. Eventually, this process + Samba, PC-NFS, native NTFS, etc.). Eventually, this process will stop and from you won't have to rebuild the dependencies then on (thank God...).<P> - At this point, the compiler should be happily chugging away on your - files. <P> + At this point, the compiler should be happily chugging away on the + ACE files. <P> <LI> USING ace.lib. <P> @@ -383,7 +391,7 @@ When it's done, you should have a static or dynamic library same code, we need to remove the /GX flag. Go to Build/Settings/C++/Category:C++ Language. By default, the flag "Enable Exception Handling" should be checked. Click on it to mark - it unchecked. The flag /GX will disappear from Project_Options. + it unchecked. The flag /GX will disappear from Project_Options. <P> <LI> SET UP THE LINKER. <P> @@ -449,6 +457,166 @@ card. This is one method: <P> </UL> +<HR> +<A NAME="svcsinstall"> +<H3>Building and Installing ACE Network Services</H3> + +The following explains how to build the ACE <A +HREF="ACE-netsvcs.html">network services</A> on <A +HREF="#unixsvcs">UNIX</A> and <A HREF="#win32svcs">Win32</A>. + +<A NAME="unixsvcs"> +<H4>Building and Installing ACE Network Services on UNIX</H3> + +Building and installing ACE Network Services on UNIX is relatively +simple (the <A HREF="#win32svcs">process</A> for Win32 is different). +Here's what you need to do: <P> + +<OL> + +<LI> Build and install ACE on UNIX as described <A +HREF="#unix">earlier</A>. If ACE is built at the root of the ACE +source tree (and ACE has been ported to your platform, of course) the +netsvcs static and shared object libraries should be built +automatically. In addition, the server driver program +(<CODE>main</CODE>) contained in <A +HREF="http://www.cs.wustl.edu/~schmidt/ACE_wrappers/netsvcs/servers/main.cpp"> +$WRAPPER_ROOT/netsvcs/servers/main.cpp</A> should also be compiled and ready to run.<P> + +<LI> Set your LD_LIBRARY_PATH environment variable to where the binary + version of the ACE netsvcs library. For example, you probably + want to do something like the following <P> + +<pre><code> +% setenv LD_LIBRARY_PATH $WRAPPER_ROOT/ace:$LD_LIBRARY_PATH <P> +</pre></code> + +<LI> By default, if the shared object library is built, the services + are linked into the <CODE>main</CODE> driver program dynamically. + To specify which services should be linked in and executed, edit the +<A +HREF="http://www.cs.wustl.edu/~schmidt/ACE_wrappers/netsvcs/servers/svc.conf"> +$WRAPPER_ROOT/netsvcs/servers/svc.conf</A> file. During your editing, + you should update information (such as the default service port + numbers) that affects the initialization of services in this + file. Refer to the <A HREF="ACE-papers.html#config">Service Configurator</A> + documentation to learn how the configuration file is parsed and + how the services are dynamically linked and executed. In + addition, refer to the <A HREF="ACE-netsvcs.html">Network + Services</A> documentation to learn more about how to configure + each network service. <P> + +<LI> If you only want to link the services statically, simply remove + or rename the svc.conf file. <P> + +</OL> + +<A NAME="win32svcs"> +<H4>Building and Installing ACE Network Services on Win32</H3> + +The installation process for ACE network services on Win32 is a bit +different than UNIX. We assume you're using MSVC++ 4.x (things are a +little different for the 2.0 version...). <P> + +<UL> +<LI> Build and install ACE on Win32 as described <A +HREF="#win32">earlier</A>. <P> + +<LI> Just like installing the ace directory under ACE_wrappers, + install the new netsvcs directory under ACE_wrappers by copying + all the appropriate files, include netsvcs.mdp and netsvcs.mak. <P> + +<LI> The easiest thing to do is to use the default netsvcs.mdp and + netsvcs.mak files distributed with the release. Open the + netsvcs.mdp workspace to build netsvcs as a DLL. This project + assumes that you have set the ``global'' include path to include + $WRAPPER_ROOT/netsvcs/lib. This can be done via the following + MSDEV menu item: + + Tools/Options/Directories/Show_Directories_For:Include_Files. <P> + +<LI> If you choose not to use the given project, the following bullets + explain how to build the ACE netsvcs DLL with MSDEV.<P> + +<OL> +<LI> CREATE A PROJECT WORKSPACE. <P> + + Start by making a new project. It should be rooted at + $WRAPPER_ROOT/netsvcs/lib. We normally browse to + $WRAPPER_ROOT/netsvcs, and select "netsvcs" as the project name. + This will cause MSDEV to use the $WRAPPER_ROOT/netsvcs/lib + directory to store the project files. The actual directory and + project name are unimportant, but we'll assume you + named the project "netsvcs." Select the dynamic link library option + and say "ok." By default, the config-win32*.h files are set up to + build DLLs. If you choose to build ACE as a static library you'll + need to unset ACE_HAS_DLL in the config-win32*.h file and select + the static link library option when creating a project workspace.<P> + +<LI> INSERT FILES INTO PROJECT. <P> + + Go into the Insert menu and select "Files into project". If you're + building a static library, select all the *.cpp files in + $WRAPPER_ROOT/netsvcs/lib into the project.<P> + + Once you've selected the files and pressed "ok" it should take a + few seconds or so to for MSDEV to create the project. (Note that + in MSVC2.0 there isn't an Insert menu, so go into the Project Menu + and then "Files" and from there insert all the *.cpp files.) When + including the files on windows 95, it may ask you to select fewer + files than *.cpp. Just do A-M and N-Z or something similar. <P> + +<LI> SET THE INCLUDE PATH. <P> + + Go into Options section of the Tools menu. Add the $WRAPPER_ROOT/netsvcs/lib + directory to the default directory search path. + Then add $WRAPPER_ROOT\netsvcs to the default library search path. + This means that you can now use relative paths for linking apps + with netsvcs.lib. You may skip this step if you have set + Tools/Options/Directories/Include_Files to include + $WRAPPER_ROOT. <P> + + If you are going to compile ACE with UNICODE on, please add UNICODE + to the pre-processor definitions through: <P> + + Build -> Settings -> C/C++ -> Preprocessor -> Preprocessor + definitions <P> + +<LI> SET UP THE LINKER. <P> + + When building a DLL we must ensure that both dll and exe are using + the same libraries in order to allow standard C library functions + to share common variables (particular <TT>errno</TT>) across dll + and exe boundaries. Go to + Build/Settings/C++/Category:Code_Generation. Set Use run-time + library to "Multithreaded DLL" or "Debug Multithreaded DLL" + depending on whether you're building a release or a debug version + respectively.<P> + + When building a static lib: Go to + Build/Settings/C++/Category:Code_Generation and set run-time + library to "Debug Multithreaded" (or just "Multithreaded"). <P> + +<LI> BUILD. <P> + + Go to the Build menu and select "Build netsvcs.{lib,dll}". The first + time this happens it will rebuild all the dependencies. This may + take a while (i.e., 3 to 15 minutes, depending on whether you use + Samba, PC-NFS, native NTFS, etc.). Eventually, this process + will stop and from you won't have to rebuild the dependencies then + on (thank God...).<P> + + At this point, the compiler should be happily chugging away on + the netsvcs files. <P> + +<LI> USING netsvcs.lib. <P> + +When it's done, you should have a static or dynamic library + called netsvcs.lib. You can use this to link with test applications, + including the server driver program. <P> +</OL> +</UL> + <P><HR><P> <A NAME="advanced"> <H3>Advanced Topics</H3> diff --git a/ChangeLog-96b b/ChangeLog-96b index a87b3f508f9..1616f57e613 100644 --- a/ChangeLog-96b +++ b/ChangeLog-96b @@ -1,3 +1,14 @@ +Fri Dec 27 23:39:19 1996 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu> + + * ace/Stream.cpp (pop): Modified the code so that we don't delete + the Module we are popping unless the flags request this. + + * ace/Service_Record.cpp (fini): Always make sure to first fini() + each Module, then remove() (and delete) them. + + * ace/Stream.cpp (remove): Updated the code so that we don't + delete the Module unless the flags request this. + Thu Dec 26 18:51:22 1996 David L. Levine <levine@cs.wustl.edu> * ace/config-linux-lxpthreads.h: Has James CE Johnson's diff --git a/ace/Module.h b/ace/Module.h index a1221241628..f587ef7744f 100644 --- a/ace/Module.h +++ b/ace/Module.h @@ -37,19 +37,19 @@ class ACE_Module public: enum { - M_DELETE_NONE = 0, - // Indicates that close() should not delete any tasks. + M_DELETE_NONE = 0, + // Indicates that close() should not delete any tasks. - M_DELETE_READER = 1, - // Indicates that close() should delete the writer thread. + M_DELETE_READER = 1, + // Indicates that close() should delete the writer thread. - M_DELETE_WRITER = 2, - // Indicates that close() should delete the reader thread. + M_DELETE_WRITER = 2, + // Indicates that close() should delete the reader thread. - M_DELETE = 3 - // Indicates that close() deletes the Tasks. Don't change this - // value without updating the same enum in class ACE_Stream... - // The above flags may be or'ed together. + M_DELETE = 3 + // Indicates that close() deletes the Tasks. Don't change this + // value without updating the same enum in class ACE_Stream... + // The above flags may be or'ed together. }; // = Initialization and termination methods. diff --git a/ace/OS.cpp b/ace/OS.cpp index a297e13fc10..4a398e51184 100644 --- a/ace/OS.cpp +++ b/ace/OS.cpp @@ -588,7 +588,7 @@ ace_thread_adapter (void *args) status = (*func) (arg); // Call thread entry point. } ACE_SEH_EXCEPT (EXCEPTION_EXECUTE_HANDLER) { - ACE_DEBUG ((LM_DEBUG, "(%t) Win32 structured exception exiting outermost svc_run\n")); + ACE_DEBUG ((LM_DEBUG, "(%t) Win32 structured exception exiting thread")); // Here's where we might want to provide a hook to report this... // As it stands now, we just catch all Win32 structured exceptions // so that we can make sure to clean up correctly when the thread diff --git a/ace/Parse_Node.h b/ace/Parse_Node.h index 9423a7d5af8..f3701a964ad 100644 --- a/ace/Parse_Node.h +++ b/ace/Parse_Node.h @@ -1,7 +1,6 @@ /* -*- C++ -*- */ // $Id$ - // ============================================================================ // // = LIBRARY diff --git a/ace/Service_Record.cpp b/ace/Service_Record.cpp index 63c7e5345c5..53271cf49a1 100644 --- a/ace/Service_Record.cpp +++ b/ace/Service_Record.cpp @@ -214,8 +214,11 @@ ACE_Stream_Type::fini (void) const { ACE_Module_Type *t = m->link (); - // Final 0 arg disables ACE_Module::DELETE_THIS - str->remove (m->name (), 0); + // Final arg is an indication to *not* delete the Module. + str->remove (m->name (), MT_Module::M_DELETE_NONE); + + // Finalize the Module (this may delete it, but we don't really + // care since we don't access it again). m->fini (); m = t; } @@ -235,12 +238,10 @@ ACE_Stream_Type::remove (ACE_Module_Type *mod) MT_Stream *str = (MT_Stream *) obj; int result = 0; - ACE_Module_Type *m = this->head_; - - while (m != 0) + for (ACE_Module_Type *m = this->head_; m != 0; ) { - ACE_Module_Type *next = m->link (); // We need to do this first so we don't bomb out if we delete m! + ACE_Module_Type *next = m->link (); if (m == mod) { @@ -249,10 +250,13 @@ ACE_Stream_Type::remove (ACE_Module_Type *mod) else prev->link (next); - // Final 0 arg disables ACE_Module::DELETE_THIS - if (str->remove (m->name (), 0) == -1) + // Final arg is an indication to *not* delete the Module. + if (str->remove (m->name (), MT_Module::M_DELETE_NONE) == -1) result = -1; - m->fini (); // This call may end up deleteing m! + + // This call may end up deleting m, which is ok since we + // don't access it again! + m->fini (); } else prev = m; @@ -280,7 +284,10 @@ ACE_Module_Type * ACE_Stream_Type::find (const char *mod_name) const { ACE_TRACE ("ACE_Stream_Type::find"); - for (ACE_Module_Type *m = this->head_; m != 0; m = m->link ()) + + for (ACE_Module_Type *m = this->head_; + m != 0; + m = m->link ()) if (ACE_OS::strcmp (m->name (), mod_name) == 0) return m; diff --git a/ace/Service_Record.h b/ace/Service_Record.h index 427969d2b04..f2ce2492c26 100644 --- a/ace/Service_Record.h +++ b/ace/Service_Record.h @@ -1,7 +1,6 @@ /* -*- C++ -*- */ // $Id$ - // ============================================================================ // // = LIBRARY diff --git a/ace/Stream.cpp b/ace/Stream.cpp index ab75f3b73d9..13a1874ed51 100644 --- a/ace/Stream.cpp +++ b/ace/Stream.cpp @@ -118,19 +118,21 @@ ACE_Stream<ACE_SYNCH_2>::pop (int flags) else { // Skip over the ACE_Stream head. - ACE_Module<ACE_SYNCH_2> *top = this->stream_head_->next (); - ACE_Module<ACE_SYNCH_2> *new_top = top->next (); + ACE_Module<ACE_SYNCH_2> *top_mod = this->stream_head_->next (); + ACE_Module<ACE_SYNCH_2> *new_top = top_mod->next (); this->stream_head_->next (new_top); // Close the top ACE_Module. - top->close (flags); - delete top; + top_mod->close (flags); + + // Don't delete the Module unless the flags request this. + if (flags != ACE_Module<ACE_SYNCH_2>::M_DELETE_NONE) + delete top_mod; this->stream_head_->writer ()->next (new_top->writer ()); new_top->reader ()->next (this->stream_head_->reader ()); - return 0; } } @@ -139,12 +141,15 @@ ACE_Stream<ACE_SYNCH_2>::pop (int flags) // ACE_Stream. template <ACE_SYNCH_1> int -ACE_Stream<ACE_SYNCH_2>::remove (const char *name, int flags) +ACE_Stream<ACE_SYNCH_2>::remove (const char *name, + int flags) { ACE_TRACE ("ACE_Stream<ACE_SYNCH_2>::remove"); ACE_Module<ACE_SYNCH_2> *prev = 0; - for (ACE_Module<ACE_SYNCH_2> *mod = this->stream_head_; mod != 0; mod = mod->next ()) + for (ACE_Module<ACE_SYNCH_2> *mod = this->stream_head_; + mod != 0; + mod = mod->next ()) if (ACE_OS::strcmp (mod->name (), name) == 0) { if (prev == 0) // Deleting ACE_Stream Head @@ -154,7 +159,11 @@ ACE_Stream<ACE_SYNCH_2>::remove (const char *name, int flags) // Close down the module and release the memory. mod->close (flags); - delete mod; + + // Don't delete the Module unless the flags request this. + if (flags != ACE_Module<ACE_SYNCH_2>::M_DELETE_NONE) + delete mod; + return 0; } else diff --git a/examples/Threads/task_two.cpp b/examples/Threads/task_two.cpp index 454b3a62adf..169107488f2 100644 --- a/examples/Threads/task_two.cpp +++ b/examples/Threads/task_two.cpp @@ -13,7 +13,7 @@ typedef ACE_Atomic_Op<ACE_Thread_Mutex, int> ATOMIC_INT; -static u_long zero = 0; +static int zero = 0; static ATOMIC_INT task_count (zero); static ATOMIC_INT max_count (zero); static ATOMIC_INT wait_count (zero); @@ -46,7 +46,7 @@ Task_Test::open (void *) task_count++; ACE_DEBUG ((LM_DEBUG, "(%t) creating Task_Test, task count = %d\n", - (u_long) task_count)); + (int) task_count)); return this->activate (THR_BOUND); } @@ -58,7 +58,7 @@ Task_Test::close (u_long) task_count--; ACE_DEBUG ((LM_DEBUG, "(%t) destroying Task_Test, task count = %d\n", - (u_long) task_count)); + (int) task_count)); wait_count--; // delete this; return 0; @@ -93,7 +93,7 @@ main (int argc, char *argv[]) for (int i = 1; i <= n_iterations; i++) { ACE_DEBUG ((LM_DEBUG, "(%t) iteration = %d, max_count %d\n", - i, (u_long) max_count)); + i, (int) max_count)); max_count = 0; ACE_DEBUG ((LM_DEBUG, "(%t) starting %d task%s\n", @@ -118,7 +118,7 @@ main (int argc, char *argv[]) ACE_Thread::yield (); ACE_DEBUG ((LM_DEBUG, "(%t) iteration %d finished, max_count %d, wait_count %d, waiting for tasks to exit\n", - i, (u_long) max_count, (u_long) wait_count)); + i, (int) max_count, (int) wait_count)); // Wait for all the tasks to exit. ACE_Service_Config::thr_mgr ()->wait (); diff --git a/netsvcs/ACE-netsvcs.html b/netsvcs/ACE-netsvcs.html index ee0dc874af6..6a3998fbc6b 100644 --- a/netsvcs/ACE-netsvcs.html +++ b/netsvcs/ACE-netsvcs.html @@ -50,8 +50,9 @@ Configurator</A>, which is an object-oriented framework that automates the configuration and reconfiguration of multi-service daemons. All the ACE network services are configured using the Service Configurator. Please refer to the <A -HREF="http://www.cs.wustl.edu/~schmidt/NETSVC-INSTALL.html">online documentation</a> for more -information on installing and testing the ACE network services.<P> +HREF="http://www.cs.wustl.edu/~schmidt/ACE-INSTALL.html">online +documentation</a> for more information on installing and testing the +ACE network services.<P> <P><HR> <A NAME="name-overview"> |