From 672e06a951b539492306180c7e4a22bf128bd839 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Fri, 7 Feb 2014 22:23:24 +0100 Subject: Shared/Logs: Add workaround for "w" flag used with dynamic name files Ignore "w" flag and always use "a" for log files with dynamic name since the file handle is created at every log line and "w" would delete any other logged line from previous _write() calls. The best solution would be to overwrite only at first call and append at any other call. --- src/server/shared/Logging/AppenderFile.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/server/shared/Logging/AppenderFile.cpp') diff --git a/src/server/shared/Logging/AppenderFile.cpp b/src/server/shared/Logging/AppenderFile.cpp index b9c2fd7339d..0d52de89f17 100644 --- a/src/server/shared/Logging/AppenderFile.cpp +++ b/src/server/shared/Logging/AppenderFile.cpp @@ -49,7 +49,8 @@ void AppenderFile::_write(LogMessage const& message) { char namebuf[TRINITY_PATH_MAX]; snprintf(namebuf, TRINITY_PATH_MAX, filename.c_str(), message.param1.c_str()); - logfile = OpenFile(namebuf, mode, backup || exceedMaxSize); + // always use "a" with dynamic name otherwise it could delete the log we wrote in last _write() call + logfile = OpenFile(namebuf, "a", backup || exceedMaxSize); } else if (exceedMaxSize) logfile = OpenFile(filename, "w", true); -- cgit v1.2.3 From 89af6097f37587e178ac412252326351ca655075 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Fri, 7 Feb 2014 23:24:24 +0100 Subject: Shared/Logs: Make AppenderFile more thread-safe In case of dynamic file names don't store the FILE* handle in a shared class variable but keep it only at function scope. Valgrind log: at _IO_un_link (genops.c:69) by fclose@@GLIBC_2.2.5 (iofclose.c:55) by AppenderFile::CloseFile() (AppenderFile.cpp:94) by AppenderFile::_write(LogMessage const&) (AppenderFile.cpp:66) by Appender::write(LogMessage&) (Appender.cpp:102) by Logger::write(LogMessage&) const (Logger.cpp:63) by Log::write(LogMessage*) (Log.cpp:279) by Log::vlog(std::string const&, LogLevel, char const*, __va_list_tag*) (Log.cpp:267) by Log::outMessage(std::string const&, LogLevel, char const*, ...) (Log.h:129) Address 0x2a1bd2d0 is 0 bytes inside a block of size 568 free'd at free (vg_replace_malloc.c:468) by fclose@@GLIBC_2.2.5 (iofclose.c:85) by AppenderFile::CloseFile() (AppenderFile.cpp:94) by AppenderFile::_write(LogMessage const&) (AppenderFile.cpp:66) by Appender::write(LogMessage&) (Appender.cpp:102) by Logger::write(LogMessage&) const (Logger.cpp:63) by Log::write(LogMessage*) (Log.cpp:279) by Log::vlog(std::string const&, LogLevel, char const*, __va_list_tag*) (Log.cpp:267) by Log::outMessage(std::string const&, LogLevel, char const*, ...) (Log.h:129) --- src/server/shared/Logging/AppenderFile.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'src/server/shared/Logging/AppenderFile.cpp') diff --git a/src/server/shared/Logging/AppenderFile.cpp b/src/server/shared/Logging/AppenderFile.cpp index 0d52de89f17..7544dc916df 100644 --- a/src/server/shared/Logging/AppenderFile.cpp +++ b/src/server/shared/Logging/AppenderFile.cpp @@ -33,7 +33,8 @@ AppenderFile::AppenderFile(uint8 id, std::string const& name, LogLevel level, co dynamicName = std::string::npos != filename.find("%s"); backup = (_flags & APPENDER_FLAGS_MAKE_FILE_BACKUP) != 0; - logfile = !dynamicName ? OpenFile(_filename, _mode, mode == "w" && backup) : NULL; + if (!dynamicName) + logfile = !dynamicName ? OpenFile(_filename, _mode, mode == "w" && backup) : NULL; } AppenderFile::~AppenderFile() @@ -50,7 +51,14 @@ void AppenderFile::_write(LogMessage const& message) char namebuf[TRINITY_PATH_MAX]; snprintf(namebuf, TRINITY_PATH_MAX, filename.c_str(), message.param1.c_str()); // always use "a" with dynamic name otherwise it could delete the log we wrote in last _write() call - logfile = OpenFile(namebuf, "a", backup || exceedMaxSize); + FILE* file = OpenFile(namebuf, "a", backup || exceedMaxSize); + if (!file) + return; + fprintf(file, "%s%s", message.prefix.c_str(), message.text.c_str()); + fflush(file); + fileSize += uint64(message.Size()); + fclose(file); + return; } else if (exceedMaxSize) logfile = OpenFile(filename, "w", true); @@ -61,9 +69,6 @@ void AppenderFile::_write(LogMessage const& message) fprintf(logfile, "%s%s", message.prefix.c_str(), message.text.c_str()); fflush(logfile); fileSize += uint64(message.Size()); - - if (dynamicName) - CloseFile(); } FILE* AppenderFile::OpenFile(std::string const &filename, std::string const &mode, bool backup) -- cgit v1.2.3 From 592b57a251f12af5194421cd9cec20c0a9e99cc5 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sat, 8 Feb 2014 11:35:25 +0100 Subject: Shared/Logs: Code cleanup Remove unneeded check added in 89af6097f37587e178ac412252326351ca655075 --- src/server/shared/Logging/AppenderFile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/server/shared/Logging/AppenderFile.cpp') diff --git a/src/server/shared/Logging/AppenderFile.cpp b/src/server/shared/Logging/AppenderFile.cpp index 7544dc916df..a88188266e2 100644 --- a/src/server/shared/Logging/AppenderFile.cpp +++ b/src/server/shared/Logging/AppenderFile.cpp @@ -34,7 +34,7 @@ AppenderFile::AppenderFile(uint8 id, std::string const& name, LogLevel level, co backup = (_flags & APPENDER_FLAGS_MAKE_FILE_BACKUP) != 0; if (!dynamicName) - logfile = !dynamicName ? OpenFile(_filename, _mode, mode == "w" && backup) : NULL; + logfile = OpenFile(_filename, _mode, mode == "w" && backup); } AppenderFile::~AppenderFile() -- cgit v1.2.3 From e469ff5e88127621eae329b81cd171201c7ecead Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 23 Mar 2014 12:54:09 +0100 Subject: Fixed build without PCH --- .../Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp | 8 +++++++- src/server/shared/Common.h | 10 ---------- src/server/shared/Logging/AppenderFile.cpp | 1 + 3 files changed, 8 insertions(+), 11 deletions(-) (limited to 'src/server/shared/Logging/AppenderFile.cpp') diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp index 3e18213b745..3ecbb473ac2 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp @@ -15,11 +15,17 @@ * with this program. If not, see . */ +#include "CellImpl.h" #include "CreatureTextMgr.h" +#include "GridNotifiersImpl.h" +#include "GossipDef.h" #include "MoveSpline.h" #include "MoveSplineInit.h" -#include "SpellScript.h" +#include "PassiveAI.h" #include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "SpellAuraEffects.h" +#include "SpellScript.h" #include "Transport.h" #include "TransportMgr.h" #include "Vehicle.h" diff --git a/src/server/shared/Common.h b/src/server/shared/Common.h index 5dea589da25..fb153f2ba3e 100644 --- a/src/server/shared/Common.h +++ b/src/server/shared/Common.h @@ -71,12 +71,6 @@ #include #include -#if PLATFORM == PLATFORM_WINDOWS -#define STRCASECMP stricmp -#else -#define STRCASECMP strcasecmp -#endif - #include #include #include @@ -114,8 +108,6 @@ #include -#define I32FMT "%08I32X" -#define I64FMT "%016I64X" #define snprintf _snprintf #define atoll _atoi64 #define vsnprintf _vsnprintf @@ -126,8 +118,6 @@ #define stricmp strcasecmp #define strnicmp strncasecmp -#define I32FMT "%08X" -#define I64FMT "%016llX" #endif diff --git a/src/server/shared/Logging/AppenderFile.cpp b/src/server/shared/Logging/AppenderFile.cpp index a88188266e2..1a8fa8e7983 100644 --- a/src/server/shared/Logging/AppenderFile.cpp +++ b/src/server/shared/Logging/AppenderFile.cpp @@ -16,6 +16,7 @@ */ #include "AppenderFile.h" +#include "Common.h" #if PLATFORM == PLATFORM_WINDOWS # include -- cgit v1.2.3 From aeff7944d1014963ec6dcfbb9cb3b52960e6613a Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 24 Mar 2014 09:01:44 +0100 Subject: Core/Logging: Fixed filenames of backup logs Closes #11765 --- src/server/shared/Logging/AppenderFile.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/server/shared/Logging/AppenderFile.cpp') diff --git a/src/server/shared/Logging/AppenderFile.cpp b/src/server/shared/Logging/AppenderFile.cpp index 1a8fa8e7983..f2532ad8bb8 100644 --- a/src/server/shared/Logging/AppenderFile.cpp +++ b/src/server/shared/Logging/AppenderFile.cpp @@ -81,6 +81,7 @@ FILE* AppenderFile::OpenFile(std::string const &filename, std::string const &mod std::string newName(fullName); newName.push_back('.'); newName.append(LogMessage::getTimeStr(time(NULL))); + std::replace(newName.begin(), newName.end(), ':', '-'); rename(fullName.c_str(), newName.c_str()); // no error handling... if we couldn't make a backup, just ignore } -- cgit v1.2.3