Main Page   Class Hierarchy   Alphabetical List   Data Structures   File List   Data Fields   Globals  

nml_srv.cc File Reference

#include "rcs_defs.hh"
#include <string.h>
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
#include "nml.hh"
#include "nmlmsg.hh"
#include "cms.hh"
#include "nml_srv.hh"
#include "rem_msg.hh"
#include "rcs_prnt.hh"
#include "timer.hh"
#include "rcs_exit.hh"
#include "dbg_mem.h"
#include "cmsdiag.hh"

Include dependency graph for nml_srv.cc:

Include dependency graph

Go to the source code of this file.

Functions

void catch_control_C1 (int sig)
void catch_control_C2 (int sig)
void run_nml_server_exit (int i)
void RCS_EXPORT run_nml_servers ()
void RCS_EXPORT spawn_nml_servers ()
void RCS_EXPORT kill_nml_servers ()
void RCS_EXPORT nml_server_cleanup ()

Variables

RCS_EXPORT NML_SUPER_SERVERNML_Default_Super_Server
int nml_control_C_caught = 0
int nml_sigint_count = 0
int dont_kill_servers = 0
int dont_cleanup_servers = 0
int nmlsrv_last_sig = 0


Function Documentation

void catch_control_C1 int    sig [static]
 

Definition at line 611 of file nml_srv.cc.

00613 {
00614   nmlsrv_last_sig = sig;
00615   nml_sigint_count++;
00616 #ifndef WIN32
00617   signal (SIGINT, SIG_DFL);
00618 #endif
00619   if (NULL != NML_Default_Super_Server)
00620     {
00621 #ifdef VXWORKS
00622       NML_Default_Super_Server->delete_all_servers ();
00623       if (NULL != NML_Default_Super_Server->servers)
00624         {
00625           if (0 == NML_Default_Super_Server->servers->list_size)
00626             {
00627 #endif
00628               delete NML_Default_Super_Server;
00629               NML_Default_Super_Server = (NML_SUPER_SERVER *) NULL;
00630 #ifdef VXWORKS
00631             }
00632         }
00633 #endif
00634     }
00635 #ifdef VXWORKS
00636   taskLock ();
00637 #endif
00638   dont_kill_servers = 1;
00639   dont_cleanup_servers = 1;
00640   nml_cleanup ();
00641   dont_kill_servers = 0;
00642   dont_cleanup_servers = 0;
00643 #ifdef VXWORKS
00644   taskUnlock ();
00645 #endif
00646 #ifdef UNDER_CE
00647   ExitThread (0);
00648 #else
00649   exit (0);
00650 #endif
00651 #ifdef WIN32
00652   return (0);                   // Just to please the compiler.
00653 #endif
00654 }                               /*  */

void catch_control_C2 int    sig [static]
 

Definition at line 661 of file nml_srv.cc.

00663 {
00664   nmlsrv_last_sig = sig;
00665 #ifndef WIN32
00666   signal (SIGINT, SIG_DFL);
00667 #endif
00668   nml_control_C_caught = 1;
00669 #if defined(WIN32) && !defined(gnuwin32)
00670   return (0);
00671 #endif
00672 }

void run_nml_server_exit int    i
 

Definition at line 675 of file nml_srv.cc.

Referenced by run_nml_servers().

00676 {
00677 #ifndef UNDER_CE
00678 #if defined(_WINDOWS) && !defined(gnuwin32)
00679   MessageBox (NULL, "Exiting run_nml_servers().", "NML Message", MB_OK);
00680 #endif
00681 #endif
00682   rcs_exit (i);
00683 }

void RCS_EXPORT run_nml_servers  
 

Definition at line 686 of file nml_srv.cc.

Referenced by main(), and run_perfsvr().

00687 {
00688 #if defined(sun4os5) || defined(__MSDOS__) && !defined(WIN32)
00689   atexit (nml_cleanup);
00690 #endif
00691   if (NULL != NML_Default_Super_Server)
00692     {
00693       if (NML_Default_Super_Server->servers != NULL)
00694         {
00695           if (NML_Default_Super_Server->servers->list_size <
00696               NML_Default_Super_Server->unspawned_servers)
00697             {
00698               NML_Default_Super_Server->unspawned_servers =
00699                 NML_Default_Super_Server->servers->list_size;
00700             }
00701           if (NML_Default_Super_Server->unspawned_servers <= 0)
00702             {
00703               rcs_print_error
00704                 ("run_nml_servers(): No buffers without servers already spawned for them.\n");
00705               return;
00706             }
00707           if (NML_Default_Super_Server->unspawned_servers == 1)
00708             {
00709               NML_Default_Super_Server->unspawned_servers = 0;
00710               NML_SERVER *sole_server;
00711               sole_server =
00712                 (NML_SERVER *) NML_Default_Super_Server->servers->get_head ();
00713               while (sole_server != NULL)
00714                 {
00715                   if (NULL != sole_server->remote_port)
00716                     {
00717                       if (!sole_server->remote_port->running &&
00718                           !sole_server->server_spawned)
00719                         {
00720                           break;
00721                         }
00722                     }
00723                   sole_server =
00724                     (NML_SERVER *) NML_Default_Super_Server->servers->
00725                     get_next ();
00726                 }
00727               if (NULL == sole_server)
00728                 {
00729                   rcs_print_error
00730                     ("run_nml_servers() : sole_server is NULL.\n");
00731                   run_nml_server_exit (-1);
00732                 }
00733               else
00734                 {
00735 #ifndef UNDER_CE
00736 #if defined(WIN32) && !defined(gnuwin32)
00737                   SetConsoleCtrlHandler (catch_control_C1, TRUE);
00738 #else
00739 #ifdef sparcworks_sun4
00740                   signal (SIGINT, (void (*)(int,...)) catch_control_C1);
00741 #else
00742                   signal (SIGINT, catch_control_C1);
00743 #endif
00744 #endif
00745 #endif
00746                   sole_server->run (0);
00747                   run_nml_server_exit (-1);
00748                 }
00749             }
00750           else
00751             {
00752               nml_control_C_caught = 0;
00753               NML_Default_Super_Server->spawn_all_servers ();
00754 #ifndef UNDER_CE
00755 #if defined(WIN32) && !defined(gnuwin32)
00756               SetConsoleCtrlHandler (catch_control_C2, TRUE);
00757 #else
00758 #ifdef sparcworks_sun4
00759               signal (SIGINT, (void (*)(int,...)) catch_control_C2);
00760 #else
00761               signal (SIGINT, catch_control_C2);
00762 #endif
00763 #endif
00764 #endif
00765               while (!nml_control_C_caught)
00766                 esleep (2.0);
00767               NML_Default_Super_Server->kill_all_servers ();
00768               nml_cleanup ();
00769               run_nml_server_exit (0);
00770             }
00771         }
00772       else
00773         {
00774           rcs_print_error
00775             ("run_nml_servers(): No buffers without servers already spawned for them.\n");
00776         }
00777     }
00778   else
00779     {
00780       rcs_print_error
00781         ("run_nml_servers(): No buffers without servers already spawned for them.\n");
00782     }
00783   run_nml_server_exit (-1);
00784 }

void RCS_EXPORT spawn_nml_servers  
 

Definition at line 787 of file nml_srv.cc.

Referenced by nml_start().

00788 {
00789   if (NULL != NML_Default_Super_Server)
00790     {
00791       NML_Default_Super_Server->spawn_all_servers ();
00792     }
00793 }

void RCS_EXPORT kill_nml_servers  
 

Definition at line 796 of file nml_srv.cc.

00797 {
00798   if (!dont_kill_servers)
00799     {
00800       if (NULL != NML_Default_Super_Server)
00801         {
00802           NML_Default_Super_Server->kill_all_servers ();
00803         }
00804     }
00805 }

void RCS_EXPORT nml_server_cleanup  
 

Definition at line 808 of file nml_srv.cc.

Referenced by nml_cleanup().

00809 {
00810   if (!dont_cleanup_servers)
00811     {
00812       if (NULL != NML_Default_Super_Server)
00813         {
00814           NML_Default_Super_Server->kill_all_servers ();
00815           NML_Default_Super_Server->delete_all_servers ();
00816 #ifdef VXWORKS
00817           if (NULL != NML_Default_Super_Server->servers)
00818             {
00819               if (0 == NML_Default_Super_Server->servers->list_size)
00820                 {
00821 #endif
00822                   delete NML_Default_Super_Server;
00823                   NML_Default_Super_Server = (NML_SUPER_SERVER *) NULL;
00824 #ifdef VXWORKS
00825                 }
00826             }
00827 #endif
00828         }
00829     }
00830 }


Variable Documentation

RCS_EXPORT NML_SUPER_SERVER* NML_Default_Super_Server
 

Initial value:

Definition at line 419 of file nml_srv.cc.

int nml_control_C_caught = 0
 

Definition at line 600 of file nml_srv.cc.

int nml_sigint_count = 0
 

Definition at line 601 of file nml_srv.cc.

int dont_kill_servers = 0
 

Definition at line 602 of file nml_srv.cc.

int dont_cleanup_servers = 0
 

Definition at line 603 of file nml_srv.cc.

int nmlsrv_last_sig = 0 [static]
 

Definition at line 604 of file nml_srv.cc.


Generated on Sun Dec 2 15:57:17 2001 for rcslib by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001