#include <signal.h>
#ifndef _WIN32
- #include <dirent.h>
#include <unistd.h>
#include <sys/resource.h>
#include <dlfcn.h>
}
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())
{