コード例 #1
0
// Restores the UDR server signal handlers to JVM signal handlers before re-entering
// any Java code.  
NABoolean restoreJavaSignalHandlers()
{
  UDR_DEBUG0("[SIGNAL] Restore Java signal handlers before entering Java LM");
  struct sigaction oldAction, sigAct;

  sigemptyset(&(sigAct.sa_mask));
  sigAct.sa_flags   = 0;

  for(Int32 i=0; i<sizeof(signalAttrTable)/sizeof(SignalAttr); i++){
    if (sigaction (signalAttrTable[i].sigType, (struct sigaction*)NULL, &oldAction)) {
      cerr << "[MXUDR DEBUG SIGNAL HANDLER] " 
	   << "sigaction() failed, cannot obtain old signal handler for " 
	   << signalAttrTable[i].sigName << endl;
      return FALSE;
    }
    if ( oldAction.sa_handler == signalAttrTable[i].javaSigAction.sa_handler ) {
       UDR_DEBUG1("[SIGNAL] Java signal handler for %s already active in restoreJavaSignalHandlers",
                   signalAttrTable[i].sigName);
       continue;
    }

    sigAct.sa_handler = signalAttrTable[i].javaSigAction.sa_handler;
    sigAct.sa_mask = signalAttrTable[i].javaSigAction.sa_mask;
    sigAct.sa_flags = signalAttrTable[i].javaSigAction.sa_flags;
    if (sigaction (signalAttrTable[i].sigType, &sigAct, (struct sigaction*)NULL)) {
      cerr << "[MXUDR DEBUG SIGNAL HANDLER] " 
	   << "sigaction() failed, cannot restore Java signal handler for " 
	   << signalAttrTable[i].sigName << endl;
      return FALSE;
    }
  }
  return TRUE;
}
コード例 #2
0
// --------------------------------------------------------------------------- 
// cfgFileIsOpen: open config file, if already open, return TRUE  
// ---------------------------------------------------------------------------
NABoolean UdrCfgParser::cfgFileIsOpen(NAString &errorText)
{
   if(cfgFile)
      return TRUE;

   NABoolean envFound = FALSE;

   if(cfgFileName = getenv("MXUDRCFG"))
   {
      envFound = TRUE;
      UDR_DEBUG1("UdrCfgParser(): MXUDRCFG cfgFileName is %s", cfgFileName);
   }
   else
   {
     NAString s("c:/tdm_sql/udr/mxudrcfg");
     char installdir[1024];
     Lng32 resultlength = 0;
     Int32 res = ComRtGetInstallDir(installdir, 1024, &resultlength);
     if (res == 0)
     {
       s = installdir;
       s += "/mxudrcfg";
     }
     cfgFileName = strdup(s.data());
     UDR_DEBUG1("UdrCfgParser(): default cfgFileName is %s", cfgFileName);
   }
   
   cfgFile = fopen(cfgFileName, "rt");
   if (cfgFile == NULL)
   {
      if ((envFound) || ((!envFound) && (errno != ENOENT)) )
      {
         errorText +="*** ERROR: UdrCfgParser(): could not open config file ";
         errorText += cfgFileName;
         errorText += ": ";
         errorText += strerror(errno);
         errorText += ". Check envvar MXUDRCFG setting.\n";
      }

      return FALSE;
   }

   UDR_DEBUG0("UdrCfgParser(): Open config file successful");
   return TRUE;

}
コード例 #3
0
void comTFDS(const char *msg1, const char *msg2, const char *msg3, const char *msg4, const char *msg5, NABoolean dialOut
	   , NABoolean writeToSeaLog 
             )
{
  setSignalHandlersToDefault();

  if(!msg1)
    msg1 = "";
  if(!msg2)
    msg2 = "";
  if(!msg3)
    msg3 = "";
  if(!msg4)
    msg4 = "";
  if(!msg5)
    msg5 = "";

  UDR_DEBUG1("[SIGNAL] %s", msg1);
  UDR_DEBUG1("[SIGNAL] %s", msg2);
  UDR_DEBUG1("[SIGNAL] %s", msg3);
  UDR_DEBUG1("[SIGNAL] %s", msg4);
  UDR_DEBUG1("[SIGNAL] %s", msg5);

  UDR_DEBUG0("[SIGNAL] Logging an EMS message");
  char msg[TEXT_SIZE];
  strncpy(msg, msg1, sizeof(msg));
  strncat(msg, ", ", sizeof(msg)-strlen(msg));
  strncat(msg, msg2, sizeof(msg)-strlen(msg));
  strncat(msg, ", ", sizeof(msg)-strlen(msg));
  strncat(msg, msg3, sizeof(msg)-strlen(msg));
  strncat(msg, ", ", sizeof(msg)-strlen(msg));
  strncat(msg, msg4, sizeof(msg)-strlen(msg));
  strncat(msg, ", ", sizeof(msg)-strlen(msg));
  strncat(msg, msg5, sizeof(msg)-strlen(msg));
  if (writeToSeaLog)
     logEMS(msg);
  else
     logStdErr(msg);

  UDR_DEBUG0("[SIGNAL] Aborting...");
  abort();
}
コード例 #4
0
void UdrSignalHandler( Int32 signo )
{

  // Block any more signals inside signal handler
  sigset_t sigMask;
  sigfillset (&sigMask);
  sigprocmask(SIG_BLOCK, &sigMask, NULL);

  UDR_DEBUG1("[SIGNAL] Caught signal %d", signo);
  const char *msg1 = COPYRIGHT_UDRSERV_PRODNAME_H " Signal Handler";
  char msg2[TEXT_SIZE];
  char msg3[2 * TEXT_SIZE]; // to accommodate 3-part ANSI name for routine

  sprintf(msg2, "SIGNAL %d: ", signo); // TEXT_SIZE is big enough.
  const char *sigText;
  switch( signo )
    {
    case SIGHUP:
      sigText = "Hangup.";
      break;
    case SIGINT:
      sigText = "Interrupt.";
      break;
    case SIGQUIT:
      sigText = "Quit.";
      break;
    case SIGILL:
      sigText = "Instruction failure.";
      break;
    case SIGABRT:
      sigText = "Abnormal termination.";
      break;
    case SIGBUS:
      sigText = "Bus error.";
      break;
    case SIGFPE:
      sigText = "Arithmetic overflow.";
      break;
    case SIGSEGV:
      sigText = "Illegal address reference.";
      break;
    case SIGPIPE:
      sigText = "Pipe error.";
      break;
    case SIGALRM:
      sigText = "Alarm.";
      break;
    case SIGTERM:
      sigText = "Software Terminate.";
      break;
    case SIGUSR1:
      sigText = "User defined 1.";
      break;
    case SIGUSR2:
      sigText = "User defined 2.";
      break;
    case SIGTSTP:
      sigText = "Interactive Stop.";
      break;

    case SIGVTALRM:
      sigText = "Virtual alarm clock.";
      break;
    case SIGXCPU:
      sigText = "CPU time limit exceeded.";
      break;
    case SIGXFSZ:
      sigText = "File size limit exceeded.";
      break;
    case SIGSTKFLT:
      sigText = "Stack fault.";
      break;
    case SIGIO:
      sigText = "I/O now possible.";
      break;
    case SIGPWR:
      sigText = "Power failure.";
      break;
    case SIGUNUSED:
      sigText = "Unused signal.";
      break;
    case SIGTTIN:
      sigText = "Background Read error.";
      break;
    case SIGTTOU:
      sigText = "Background Write error.";
      break;
    default:
      sigText = "Unknown error.";
    }
  strncat(msg2, sigText, sizeof(msg2) - strlen(msg2));

  NABoolean isRoutineActive;
  getActiveRoutineInfoMsg(msg3, isRoutineActive);

  comTFDS(msg1, msg2, msg3, NULL, NULL, TRUE, FALSE);
} // UdrTrapHandler()