コード例 #1
0
void setExitHandler()
{

  if (getenv("SQLMX_UDR_NO_EXIT_HANDLER"))
  {
    return;
  }

  UDR_DEBUG0("[EXIT HANDLER] Setting up the MXUDR Exit handler");

  Int32 rc = atexit(UdrExitHandler);

    UDR_DEBUG0("[EXIT HANDLER] Completed setting up the MXUDR Exit handler");

}
コード例 #2
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;
}
コード例 #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
// Udr exit handler routine
// Main purpose of this handler routine is to check if the UDR called exit
// which it is not supposed to do. In case UDR called exit, we log an
// event message and abort.
void UdrExitHandler()
{
  const char *msg1 = COPYRIGHT_UDRSERV_PRODNAME_H " Exit Handler";
  char msg2[TEXT_SIZE];
  char msg3[2 * TEXT_SIZE]; // to accommodate 3-part ANSI name for routine

  UDR_DEBUG0("[EXIT HANDLER] Entered MXUDR Exit handler");

  NABoolean isRoutineActive;
  getActiveRoutineInfoMsg(msg3, isRoutineActive);
  // If the UDR was active and it called exit intentionally, 
  // log a message and capture TFDS state.
  if (isRoutineActive == TRUE) {
    UDR_DEBUG0("[EXIT HANDLER] UDR invoked exit()");
    strcpy(msg2, "UDR invoked exit() "); 
    comTFDS(msg1, msg2, msg3, NULL, NULL, FALSE, FALSE);
  }

  // Call MPI exit handler routine from this exit handler
  my_mpi_fclose();

}
コード例 #5
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;

}
コード例 #6
0
// Saves the UDR trap signal handlers 
NABoolean saveUdrTrapSignalHandlers()
{
  UDR_DEBUG0("[SIGNAL] Save  UDR Trap signal handlers");
  struct sigaction oldAction;

  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;
    }

    signalAttrTable[i].udrSigAction.sa_handler = oldAction.sa_handler;
    signalAttrTable[i].udrSigAction.sa_mask = oldAction.sa_mask;
    signalAttrTable[i].udrSigAction.sa_flags = oldAction.sa_flags;
  }
  return TRUE;
}
コード例 #7
0
// Sets the UDR server signal handlers to default so that the JVM won't complain. 
NABoolean setSignalHandlersToDefault()
{
  struct sigaction oldAction, sigAct;

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

  UDR_DEBUG0("[SIGNAL] Set signal handlers to default before Java LM initialization");
  for(Int32 i=0; i<sizeof(signalAttrTable)/sizeof(SignalAttr); i++){
    if (sigaction(signalAttrTable[i].sigType, &sigAct, &oldAction)) {
      char msg[256];
      sprintf(msg, 
             "[UDR WARNING] sigaction() failed, cannot change %s to the default handler\n", 
             signalAttrTable[i].sigName);
      logStdErr(msg);
      return FALSE;
    }
  }
  return TRUE;
}