]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/threadengines/threadengine_pthread.cpp
m_namedmodes Only show chan key to members and opers with channels/auspex
[user/henk/code/inspircd.git] / src / threadengines / threadengine_pthread.cpp
index c1b964430a57b3493a65c2354fed8b25f7216725..40205da3118533479382f8f7f8dba2b5e182ffe1 100644 (file)
@@ -80,6 +80,8 @@ class ThreadSignalSocket : public EventHandler
 
        ~ThreadSignalSocket()
        {
+               ServerInstance->SE->DelFd(this);
+               ServerInstance->SE->Close(GetFd());
        }
 
        void Notify()
@@ -104,9 +106,10 @@ class ThreadSignalSocket : public EventHandler
 
 SocketThread::SocketThread()
 {
+       signal.sock = NULL;
        int fd = eventfd(0, EFD_NONBLOCK);
        if (fd < 0)
-               throw new CoreException("Could not create pipe " + std::string(strerror(errno)));
+               throw CoreException("Could not create pipe " + std::string(strerror(errno)));
        signal.sock = new ThreadSignalSocket(this, fd);
 }
 #else
@@ -127,6 +130,8 @@ class ThreadSignalSocket : public EventHandler
        ~ThreadSignalSocket()
        {
                close(send_fd);
+               ServerInstance->SE->DelFd(this);
+               ServerInstance->SE->Close(GetFd());
        }
 
        void Notify()
@@ -152,9 +157,10 @@ class ThreadSignalSocket : public EventHandler
 
 SocketThread::SocketThread()
 {
+       signal.sock = NULL;
        int fds[2];
        if (pipe(fds))
-               throw new CoreException("Could not create pipe " + std::string(strerror(errno)));
+               throw CoreException("Could not create pipe " + std::string(strerror(errno)));
        signal.sock = new ThreadSignalSocket(this, fds[0], fds[1]);
 }
 #endif
@@ -166,4 +172,9 @@ void SocketThread::NotifyParent()
 
 SocketThread::~SocketThread()
 {
+       if (signal.sock)
+       {
+               signal.sock->cull();
+               delete signal.sock;
+       }
 }