]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Fix peavey and w00ts bug they found by removing the nonblocking part of the logger...
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Wed, 2 Apr 2008 19:52:33 +0000 (19:52 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Wed, 2 Apr 2008 19:52:33 +0000 (19:52 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9276 e03df62e-2008-0410-955e-edbf42e46eb7

include/logger.h
src/logger.cpp
src/socketengines/socketengine_kqueue.cpp

index 384e38c1a7c022aabcf4fdf8b7407aad15d71a90..79914ac98a2a8fcb7d3fac109eabc1c889760dfa 100644 (file)
@@ -38,10 +38,6 @@ class CoreExport FileWriter : public EventHandler
         */
        FILE* log;
 
-       /** Buffer of pending log lines to be written
-        */
-       std::string buffer;
-
        /** Number of write operations that have occured
         */
        int writeops;
@@ -51,10 +47,6 @@ class CoreExport FileWriter : public EventHandler
         */
        FileWriter(InspIRCd* Instance, FILE* logfile);
 
-       /** This returns false, logfiles are writeable.
-        */
-       virtual bool Readable();
-
        /** Handle pending write events.
         * This will flush any waiting data to disk.
         * If any data remains after the fprintf call,
index 20235a826030ebc315d85a5e03de565e9003b470..8e887830db0c10c8d97790f89e9b784482436a3f 100644 (file)
@@ -333,57 +333,17 @@ void LogManager::Log(const std::string &type, int loglevel, const std::string &m
 FileWriter::FileWriter(InspIRCd* Instance, FILE* logfile)
 : ServerInstance(Instance), log(logfile), writeops(0)
 {
-       if (log)
-       {
-               Instance->SE->NonBlocking(fileno(log));
-               SetFd(fileno(log));
-               buffer.clear();
-       }
 }
 
-bool FileWriter::Readable()
+void FileWriter::HandleEvent(EventType ev, int)
 {
-       return false;
-}
-
-void FileWriter::HandleEvent(EventType, int)
-{
-       WriteLogLine("");
-       if (log)
-       {
-               ServerInstance->SE->DelFd(this);
-       }
 }
 
 void FileWriter::WriteLogLine(const std::string &line)
 {
-       if (line.length())
-       {
-               buffer.append(line);
-       }
-
        if (log)
        {
-               int written = fprintf(log,"%s",buffer.c_str());
-#ifdef WINDOWS
-               buffer.clear();
-#else
-               if ((written >= 0) && (written < (int)buffer.length()))
-               {
-                       buffer.erase(0, buffer.length());
-                       ServerInstance->SE->AddFd(this);
-               }
-               else if (written == -1)
-               {
-                       if (errno == EAGAIN)
-                               ServerInstance->SE->AddFd(this);
-               }
-               else
-               {
-                       /* Wrote the whole buffer, and no need for write callback */
-                       buffer.clear();
-               }
-#endif
+               fprintf(log,"%s",line.c_str());
                if (writeops++ % 20)
                {
                        fflush(log);
@@ -395,25 +355,12 @@ void FileWriter::Close()
 {
        if (log)
        {
-               ServerInstance->SE->Blocking(fileno(log));
-
-               if (buffer.size())
-               {
-                       fprintf(log,"%s",buffer.c_str());
-               }
-
-#ifndef WINDOWS
-               ServerInstance->SE->DelFd(this);
-#endif
-
                fflush(log);
                fclose(log);
        }
-
-       buffer.clear();
 }
 
 FileWriter::~FileWriter()
 {
-       this->Close();
 }
+
index f21d2e7105a99f648fe985b4014b7d237a966649..214afc71c42ac96f16ac8c2e3412bf6eeededc9a 100644 (file)
@@ -104,7 +104,7 @@ bool KQueueEngine::DelFd(EventHandler* eh, bool force)
        CurrentSetSize--;
        ref[fd] = NULL;
 
-       ServerInstance->Logs->Log("SOCKET",DEBUG,"Remove file descriptor: %d", fd);
+       //ServerInstance->Logs->Log("SOCKET",DEBUG,"Remove file descriptor: %d", fd);
        return true;
 }
 
@@ -169,9 +169,12 @@ int KQueueEngine::DispatchEvents()
                        /* This looks wrong but its right. As above, theres no modify
                         * call in kqueue. See the manpage.
                         */
-                       struct kevent ke;
-                       EV_SET(&ke, ke_list[j].ident, EVFILT_READ, EV_ADD, 0, 0, NULL);
-                       kevent(EngineHandle, &ke, 1, 0, 0, NULL);
+                       if (ref[ke_list[j].ident]->Readable())
+                       {
+                               struct kevent ke;
+                               EV_SET(&ke, ke_list[j].ident, EVFILT_READ, EV_ADD, 0, 0, NULL);
+                               kevent(EngineHandle, &ke, 1, 0, 0, NULL);
+                       }
                        WriteEvents++;
                        if (ref[ke_list[j].ident])
                                ref[ke_list[j].ident]->HandleEvent(EVENT_WRITE);