--- deliantra/server/common/logger.C 2010/04/11 17:27:51 1.24 +++ deliantra/server/common/logger.C 2010/04/11 17:54:13 1.25 @@ -40,12 +40,14 @@ int flags; }; +typedef std::vector > logvector; + static SMUTEX(mutex); static SMUTEX(fdlock); static SCOND(cond); static int logfd = STDERR_FILENO; static int logsync = 1; -static std::vector > queue; +static logvector queue; int log_setfd (int fd) { @@ -133,7 +135,11 @@ // we have bigger problems. if (idx == queue.size ()) { - queue.clear (); + if (idx < 32) + queue.clear (); + else + logvector ().swap (queue); // free memory, hopefully + idx = 0; } @@ -147,6 +153,7 @@ log_cleanup () { logsync = 1; + SMUTEX_UNLOCK (fdlock); for (;;) {