]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/threadengines/threadengine_pthread.cpp
Fix fd and minor memory leak in threadengine_pthread on unload of m_mysql
[user/henk/code/inspircd.git] / src / threadengines / threadengine_pthread.cpp
index c1b964430a57b3493a65c2354fed8b25f7216725..e16e401f3387927773777c952e18617ce69f2aa1 100644 (file)
@@ -80,6 +80,8 @@ class ThreadSignalSocket : public EventHandler
 
        ~ThreadSignalSocket()
        {
+               ServerInstance->SE->DelFd(this);
+               ServerInstance->SE->Close(GetFd());
        }
 
        void Notify()
@@ -104,6 +106,7 @@ 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)));
@@ -127,6 +130,8 @@ class ThreadSignalSocket : public EventHandler
        ~ThreadSignalSocket()
        {
                close(send_fd);
+               ServerInstance->SE->DelFd(this);
+               ServerInstance->SE->Close(GetFd());
        }
 
        void Notify()
@@ -152,6 +157,7 @@ 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)));
@@ -166,4 +172,9 @@ void SocketThread::NotifyParent()
 
 SocketThread::~SocketThread()
 {
+       if (signal.sock)
+       {
+               signal.sock->cull();
+               delete signal.sock;
+       }
 }