#include <signal.h>
#ifndef _WIN32
- #include <dirent.h>
#include <unistd.h>
#include <sys/resource.h>
#include <dlfcn.h>
#include <iostream>
#include "xline.h"
#include "exitcodes.h"
-#include "testsuite.h"
InspIRCd* ServerInstance = NULL;
"Received SIGTERM" // 10
};
-#ifdef INSPIRCD_ENABLE_TESTSUITE
-/** True if we have been told to run the testsuite from the commandline,
- * rather than entering the mainloop.
- */
-static int do_testsuite = 0;
-#endif
-
template<typename T> static void DeleteZero(T*&n)
{
T* t = n;
}
ports.clear();
+ // Tell modules that we're shutting down.
+ const std::string quitmsg = "Server shutting down";
+ FOREACH_MOD(OnShutdown, (quitmsg));
+
+ // Disconnect all local users
+ const UserManager::LocalList& list = Users.GetLocalUsers();
+ while (!list.empty())
+ ServerInstance->Users.QuitUser(list.front(), quitmsg);
+
GlobalCulls.Apply();
Modules->UnloadAll();
{
#ifndef _WIN32
signal(SIGALRM, SIG_IGN);
+ signal(SIGCHLD, SIG_IGN);
signal(SIGHUP, InspIRCd::SetSignal);
signal(SIGPIPE, SIG_IGN);
- signal(SIGCHLD, SIG_IGN);
- /* We want E2BIG not a signal! */
+ signal(SIGUSR1, SIG_IGN);
+ signal(SIGUSR2, SIG_IGN);
signal(SIGXFSZ, SIG_IGN);
#endif
signal(SIGTERM, InspIRCd::SetSignal);
return;
}
- std::string fname(filename);
- if (fname.empty())
- fname = ServerInstance->Config->Paths.PrependData("inspircd.pid");
+ std::string fname = ServerInstance->Config->Paths.PrependData(filename.empty() ? "inspircd.pid" : filename);
std::ofstream outfile(fname.c_str());
if (outfile.is_open())
{
{ "nopid", no_argument, &do_nopid, 1 },
{ "runasroot", no_argument, &do_root, 1 },
{ "version", no_argument, &do_version, 1 },
-#ifdef INSPIRCD_ENABLE_TESTSUITE
- { "testsuite", no_argument, &do_testsuite, 1 },
-#endif
{ 0, 0, 0, 0 }
};
}
}
-#ifdef INSPIRCD_ENABLE_TESTSUITE
- if (do_testsuite)
- do_nofork = do_debug = true;
-#endif
-
if (do_version)
{
std::cout << std::endl << INSPIRCD_VERSION << std::endl;
void InspIRCd::Run()
{
-#ifdef INSPIRCD_ENABLE_TESTSUITE
- /* See if we're supposed to be running the test suite rather than entering the mainloop */
- if (do_testsuite)
- {
- TestSuite* ts = new TestSuite;
- delete ts;
- return;
- }
-#endif
-
UpdateTime();
time_t OLDTIME = TIME.tv_sec;