diff options
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/Common.h | 4 | ||||
-rw-r--r-- | src/shared/Database/Database.h | 2 | ||||
-rw-r--r-- | src/shared/Database/DatabaseEnv.h | 2 | ||||
-rw-r--r-- | src/shared/Database/DatabaseMysql.cpp | 4 | ||||
-rw-r--r-- | src/shared/Database/DatabasePostgre.cpp | 4 | ||||
-rw-r--r-- | src/shared/Database/QueryResultPostgre.h | 4 | ||||
-rw-r--r-- | src/shared/Database/SQLStorage.cpp | 2 | ||||
-rw-r--r-- | src/shared/Database/SQLStorage.h | 2 | ||||
-rw-r--r-- | src/shared/Errors.h | 19 | ||||
-rw-r--r-- | src/shared/LockedQueue.h | 59 | ||||
-rw-r--r-- | src/shared/Log.cpp | 12 | ||||
-rw-r--r-- | src/shared/ProgressBar.cpp | 2 | ||||
-rw-r--r-- | src/shared/ProgressBar.h | 1 | ||||
-rw-r--r-- | src/shared/Threading.cpp | 36 | ||||
-rw-r--r-- | src/shared/Threading.h | 12 | ||||
-rw-r--r-- | src/shared/Util.cpp | 2 | ||||
-rw-r--r-- | src/shared/Util.h | 12 | ||||
-rw-r--r-- | src/shared/vmap/CoordModelMapping.cpp | 9 | ||||
-rw-r--r-- | src/shared/vmap/CoordModelMapping.h | 7 | ||||
-rw-r--r-- | src/shared/vmap/DebugCmdLogger.cpp | 1 | ||||
-rw-r--r-- | src/shared/vmap/TileAssembler.cpp | 2 | ||||
-rw-r--r-- | src/shared/vmap/VMapManager.cpp | 2 |
22 files changed, 129 insertions, 71 deletions
diff --git a/src/shared/Common.h b/src/shared/Common.h index 735c57eedbe..a274c5d5a0b 100644 --- a/src/shared/Common.h +++ b/src/shared/Common.h @@ -130,6 +130,7 @@ #include <float.h> +#define I32FMT "%08I32X" #define I64FMT "%016I64X" #define snprintf _snprintf #define atoll __atoi64 @@ -141,6 +142,7 @@ #define stricmp strcasecmp #define strnicmp strncasecmp +#define I32FMT "%08X" #define I64FMT "%016llX" #endif @@ -151,6 +153,8 @@ #define SI64FMTD ACE_INT64_FORMAT_SPECIFIER #define SI64LIT(N) ACE_INT64_LITERAL(N) +#define SIZEFMTD ACE_SIZE_T_FORMAT_SPECIFIER + inline float finiteAlways(float f) { return finite(f) ? f : 0.0f; } #define atol(a) strtoul( a, NULL, 10) diff --git a/src/shared/Database/Database.h b/src/shared/Database/Database.h index 7f2bdaefdb7..c7390d08a1b 100644 --- a/src/shared/Database/Database.h +++ b/src/shared/Database/Database.h @@ -41,7 +41,7 @@ class TRINITY_DLL_SPEC Database TransactionQueues m_tranQueues; ///< Transaction queues from diff. threads QueryQueues m_queryQueues; ///< Query queues from diff threads - SqlDelayThread* m_threadBody; ///< Pointer to delay sql executer + SqlDelayThread* m_threadBody; ///< Pointer to delay sql executer (owned by m_delayThread) ACE_Based::Thread* m_delayThread; ///< Pointer to executer thread public: diff --git a/src/shared/Database/DatabaseEnv.h b/src/shared/Database/DatabaseEnv.h index 1d3d735881c..d5d6867e82f 100644 --- a/src/shared/Database/DatabaseEnv.h +++ b/src/shared/Database/DatabaseEnv.h @@ -50,7 +50,7 @@ typedef DatabaseMysql DatabaseType; extern DatabaseType WorldDatabase; extern DatabaseType CharacterDatabase; -extern DatabaseType LoginDatabase; +extern DatabaseType loginDatabase; #endif diff --git a/src/shared/Database/DatabaseMysql.cpp b/src/shared/Database/DatabaseMysql.cpp index 0189b5883f7..f08ea67cbbe 100644 --- a/src/shared/Database/DatabaseMysql.cpp +++ b/src/shared/Database/DatabaseMysql.cpp @@ -440,8 +440,8 @@ void DatabaseMysql::InitDelayThread() assert(!m_delayThread); //New delay thread for delay execute - m_threadBody = new MySQLDelayThread(this); - m_delayThread = new ACE_Based::Thread(*m_threadBody); + m_threadBody = new MySQLDelayThread(this); // will deleted at m_delayThread delete + m_delayThread = new ACE_Based::Thread(m_threadBody); } void DatabaseMysql::HaltDelayThread() diff --git a/src/shared/Database/DatabasePostgre.cpp b/src/shared/Database/DatabasePostgre.cpp index c70067dfdba..8d00285255b 100644 --- a/src/shared/Database/DatabasePostgre.cpp +++ b/src/shared/Database/DatabasePostgre.cpp @@ -366,8 +366,8 @@ void DatabasePostgre::InitDelayThread() assert(!m_delayThread); //New delay thread for delay execute - m_threadBody = new PGSQLDelayThread(this); - m_delayThread = new ACE_Based::Thread(*m_threadBody); + m_threadBody = new PGSQLDelayThread(this); // Will be deleted on m_delayThread delete + m_delayThread = new ACE_Based::Thread(m_threadBody); } void DatabasePostgre::HaltDelayThread() diff --git a/src/shared/Database/QueryResultPostgre.h b/src/shared/Database/QueryResultPostgre.h index 30d69114dc6..a48c6d21fee 100644 --- a/src/shared/Database/QueryResultPostgre.h +++ b/src/shared/Database/QueryResultPostgre.h @@ -25,10 +25,12 @@ #define FD_SETSIZE 1024 #include <winsock2.h> #include <postgre/libpq-fe.h> +#include <postgre/postgres.h> #include <postgre/pg_type.h> #else #include <libpq-fe.h> -//#include <pg_type.h> +#include <postgres.h> +#include <catalog/pg_type.h> #endif class QueryResultPostgre : public QueryResult diff --git a/src/shared/Database/SQLStorage.cpp b/src/shared/Database/SQLStorage.cpp index 50fd484bff5..4113d35236d 100644 --- a/src/shared/Database/SQLStorage.cpp +++ b/src/shared/Database/SQLStorage.cpp @@ -38,7 +38,6 @@ const char GameObjectInfodstfmt[]="iiissssiifiiiiiiiiiiiiiiiiiiiiiiiiiiiii"; const char ItemPrototypesrcfmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiiifiiisiiii"; const char ItemPrototypedstfmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiiifiiiiiiii"; const char PageTextfmt[]="isi"; -const char SpellThreatfmt[]="ii"; const char InstanceTemplatesrcfmt[]="iiiiiiffffs"; const char InstanceTemplatedstfmt[]="iiiiiiffffi"; @@ -50,7 +49,6 @@ SQLStorage sEquipmentStorage(EquipmentInfofmt,"entry","creature_equip_template") SQLStorage sGOStorage(GameObjectInfosrcfmt, GameObjectInfodstfmt, "entry","gameobject_template"); SQLStorage sItemStorage(ItemPrototypesrcfmt, ItemPrototypedstfmt, "entry","item_template"); SQLStorage sPageTextStore(PageTextfmt,"entry","page_text"); -SQLStorage sSpellThreatStore(SpellThreatfmt,"entry","spell_threat"); SQLStorage sInstanceTemplate(InstanceTemplatesrcfmt, InstanceTemplatedstfmt, "map","instance_template"); void SQLStorage::Free () diff --git a/src/shared/Database/SQLStorage.h b/src/shared/Database/SQLStorage.h index 1b5b9d5dcf1..cc165af532e 100644 --- a/src/shared/Database/SQLStorage.h +++ b/src/shared/Database/SQLStorage.h @@ -65,6 +65,8 @@ class SQLStorage uint32 MaxEntry; uint32 iNumFields; + char const* GetTableName() const { return table; } + void Load(); void Free(); diff --git a/src/shared/Errors.h b/src/shared/Errors.h index 218ab561c12..bb17b94cbd0 100644 --- a/src/shared/Errors.h +++ b/src/shared/Errors.h @@ -21,10 +21,23 @@ #ifndef TRINITYCORE_ERRORS_H #define TRINITYCORE_ERRORS_H -//#include <ace/Stack_Trace.h> +#include "Common.h" -//#define WPAssert( assertion ) { if (!(assertion)) { ACE_Stack_Trace st; fprintf( stderr, "\n%s:%i in %s ASSERTION FAILED:\n %s\n%s\n", __FILE__, __LINE__,__FUNCTION__, #assertion, st.c_str()); assert( #assertion &&0 ); } } -#define WPAssert( assertion ) { if( !(assertion) ) { fprintf( stderr, "\n%s:%i in %s ASSERTION FAILED:\n %s\n", __FILE__, __LINE__,__FUNCTION__, #assertion ); assert( #assertion &&0 ); } } +#if PLATFORM != PLATFORM_WINDOWS +#ifndef HAVE_CONFIG_H +#include <config.h> +#endif +#endif + +#ifdef HAVE_ACE_STACK_TRACE_H +#include "ace/Stack_Trace.h" +#endif + +#ifdef HAVE_ACE_STACK_TRACE_H // old versions ACE not have Stack_Trace.h but used at some oS for better compatibility +#define WPAssert( assertion ) { if (!(assertion)) { ACE_Stack_Trace st; fprintf( stderr, "\n%s:%i in %s ASSERTION FAILED:\n %s\n%s\n", __FILE__, __LINE__,__FUNCTION__, #assertion, st.c_str()); assert( #assertion &&0 ); } } +#else +#define WPAssert( assertion ) { if (!(assertion)) { fprintf( stderr, "\n%s:%i in %s ASSERTION FAILED2:\n %s\n", __FILE__, __LINE__,__FUNCTION__, #assertion); assert( #assertion &&0 ); } } +#endif #define WPError( assertion, errmsg ) if( ! (assertion) ) { sLog.outError( "%\n%s:%i in %s ERROR:\n %s\n", __FILE__, __LINE__, __FUNCTION__, (char *)errmsg ); assert( false ); } #define WPWarning( assertion, errmsg ) if( ! (assertion) ) { sLog.outError( "\n%s:%i in %s WARNING:\n %s\n", __FILE__, __LINE__, __FUNCTION__, (char *)errmsg ); } diff --git a/src/shared/LockedQueue.h b/src/shared/LockedQueue.h index b085dd09b83..4087ebff0cf 100644 --- a/src/shared/LockedQueue.h +++ b/src/shared/LockedQueue.h @@ -27,11 +27,9 @@ namespace ACE_Based { - template <class T, class LockType, typename StorageType=std::deque<T> > class LockedQueue { - //! Serialize access to the Queue LockType _lock; @@ -54,14 +52,12 @@ namespace ACE_Based */ void add(const T& item) { + ACE_Guard<LockType> g(this->_lock); - ACE_Guard<LockType> g(_lock); - - ASSERT(!_canceled); - // throw Cancellation_Exception(); - - _queue.push_back(item); + ASSERT(!this->_canceled); + // throw Cancellation_Exception(); + this->_queue.push_back(item); } /** @@ -69,27 +65,25 @@ namespace ACE_Based */ T next() { + ACE_Guard<LockType> g(this->_lock); - ACE_Guard<LockType> g(_lock); + ASSERT (!_queue.empty() || !this->_canceled); + // throw Cancellation_Exception(); - ASSERT (!_queue.empty() || !_canceled); - // throw Cancellation_Exception(); - - T item = _queue.front(); - _queue.pop_front(); + T item = this->_queue.front(); + this->_queue.pop_front(); return item; - } T front() { - ACE_Guard<LockType> g(_lock); + ACE_Guard<LockType> g(this->_lock); - ASSERT (!_queue.empty()); - // throw NoSuchElement_Exception(); + ASSERT (!this->_queue.empty()); + // throw NoSuchElement_Exception(); - return _queue.front(); + return this->_queue.front(); } /** @@ -97,11 +91,9 @@ namespace ACE_Based */ void cancel() { + ACE_Guard<LockType> g(this->_lock); - ACE_Guard<LockType> g(_lock); - - _canceled = true; - + this->_canceled = true; } /** @@ -109,15 +101,13 @@ namespace ACE_Based */ bool isCanceled() { - // Faster check since the queue will not become un-canceled - if(_canceled) + if(this->_canceled) return true; - ACE_Guard<LockType> g(_lock); - - return _canceled; + ACE_Guard<LockType> g(this->_lock); + return this->_canceled; } /** @@ -125,20 +115,15 @@ namespace ACE_Based */ size_t size() { - - ACE_Guard<LockType> g(_lock); - return _queue.size(); - + ACE_Guard<LockType> g(this->_lock); + return this->_queue.size(); } bool empty() { - - ACE_Guard<LockType> g(_lock); - return _queue.empty(); + ACE_Guard<LockType> g(this->_lock); + return this->_queue.empty(); } - }; - } #endif diff --git a/src/shared/Log.cpp b/src/shared/Log.cpp index 0f1138279ff..8dc23066245 100644 --- a/src/shared/Log.cpp +++ b/src/shared/Log.cpp @@ -353,14 +353,16 @@ std::string Log::GetTimestampStr() void Log::outDB( LogTypes type, const char * str ) { - if(!str || std::string(str).empty() || type >= MAX_LOG_TYPES) - return; + if (!str || type >= MAX_LOG_TYPES) + return; std::string new_str(str); - LoginDatabase.escape_string(new_str); + if (new_str.empty()) + return; + loginDatabase.escape_string(new_str); - LoginDatabase.PExecute("INSERT INTO logs (time, realm, type, string) " - "VALUES (" UI64FMTD ", %u, %u, '%s');", uint64(time(0)), realm, (uint32)type, new_str.c_str()); + loginDatabase.PExecute("INSERT INTO logs (time, realm, type, string) " + "VALUES (" UI64FMTD ", %u, %u, '%s');", uint64(time(0)), realm, type, new_str.c_str()); } void Log::outString( const char * str, ... ) diff --git a/src/shared/ProgressBar.cpp b/src/shared/ProgressBar.cpp index b72118ad804..2eba31c2c40 100644 --- a/src/shared/ProgressBar.cpp +++ b/src/shared/ProgressBar.cpp @@ -18,6 +18,8 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include <stdio.h> + #include "ProgressBar.h" char const* const barGoLink::empty = " "; diff --git a/src/shared/ProgressBar.h b/src/shared/ProgressBar.h index 50c5c7d11e5..af7b5e03093 100644 --- a/src/shared/ProgressBar.h +++ b/src/shared/ProgressBar.h @@ -20,7 +20,6 @@ #ifndef TRINITYCORE_PROGRESSBAR_H #define TRINITYCORE_PROGRESSBAR_H -#include <stdio.h> #include "Platform/Define.h" class TRINITY_DLL_SPEC barGoLink diff --git a/src/shared/Threading.cpp b/src/shared/Threading.cpp index 496e86353ca..652f468772f 100644 --- a/src/shared/Threading.cpp +++ b/src/shared/Threading.cpp @@ -101,8 +101,12 @@ Thread::Thread() : m_task(0), m_iThreadId(0), m_hThreadHandle(0) } -Thread::Thread(Runnable& instance) : m_task(&instance), m_iThreadId(0), m_hThreadHandle(0) +Thread::Thread(Runnable* instance) : m_task(instance), m_iThreadId(0), m_hThreadHandle(0) { + // register reference to m_task to prevent it deeltion until destructor + if (m_task) + m_task->incReference(); + bool _start = start(); ASSERT (_start); } @@ -110,6 +114,10 @@ Thread::Thread(Runnable& instance) : m_task(&instance), m_iThreadId(0), m_hThrea Thread::~Thread() { //Wait(); + + // deleted runnable object (if no other references) + if (m_task) + m_task->decReference(); } //initialize Thread's class static member @@ -118,15 +126,20 @@ ThreadPriority Thread::m_TpEnum; bool Thread::start() { - if(m_task == 0 || m_iThreadId != 0) + if (m_task == 0 || m_iThreadId != 0) return false; - return (ACE_Thread::spawn(&Thread::ThreadTask, (void*)m_task, THREADFLAG, &m_iThreadId, &m_hThreadHandle) == 0); + bool res = (ACE_Thread::spawn(&Thread::ThreadTask, (void*)m_task, THREADFLAG, &m_iThreadId, &m_hThreadHandle) == 0); + + if (res) + m_task->incReference(); + + return res; } bool Thread::wait() { - if(!m_hThreadHandle || !m_task) + if (!m_hThreadHandle || !m_task) return false; ACE_THR_FUNC_RETURN _value = ACE_THR_FUNC_RETURN(-1); @@ -140,7 +153,17 @@ bool Thread::wait() void Thread::destroy() { - ACE_Thread::kill(m_iThreadId, -1); + if (!m_iThreadId || !m_task) + return; + + if (ACE_Thread::kill(m_iThreadId, -1) != 0) + return; + + m_iThreadId = 0; + m_hThreadHandle = 0; + + // reference set at ACE_Thread::spawn + m_task->decReference(); } void Thread::suspend() @@ -158,6 +181,9 @@ ACE_THR_FUNC_RETURN Thread::ThreadTask(void * param) Runnable * _task = (Runnable*)param; _task->run(); + // task execution complete, free referecne added at + _task->decReference(); + return (ACE_THR_FUNC_RETURN)0; } diff --git a/src/shared/Threading.h b/src/shared/Threading.h index eac3c0e8efb..6c3f3724bc1 100644 --- a/src/shared/Threading.h +++ b/src/shared/Threading.h @@ -21,6 +21,7 @@ #include <ace/Thread.h> #include <ace/TSS_T.h> +#include "ace/Atomic_Op.h" #include <assert.h> #include "Errors.h" @@ -32,6 +33,15 @@ namespace ACE_Based public: virtual ~Runnable() {} virtual void run() = 0; + + void incReference() { ++m_refs; } + void decReference() + { + if(!--m_refs) + delete this; + } + private: + ACE_Atomic_Op<ACE_Thread_Mutex, int> m_refs; }; enum Priority @@ -61,7 +71,7 @@ namespace ACE_Based { public: Thread(); - Thread(Runnable& instance); + explicit Thread(Runnable* instance); ~Thread(); bool start(); diff --git a/src/shared/Util.cpp b/src/shared/Util.cpp index 354568c778f..644769f2069 100644 --- a/src/shared/Util.cpp +++ b/src/shared/Util.cpp @@ -131,7 +131,7 @@ Tokens StrSplit(const std::string &src, const std::string &sep) void stripLineInvisibleChars(std::string &str) { - static std::string invChars = " \t\7"; + static std::string invChars = " \t\7\n"; size_t wpos = 0; diff --git a/src/shared/Util.h b/src/shared/Util.h index ddbf968b2c2..496411d8be3 100644 --- a/src/shared/Util.h +++ b/src/shared/Util.h @@ -321,6 +321,11 @@ uint32 CreatePIDFile(const std::string& filename); #ifndef _FLAG96 #define _FLAG96 +#ifndef PAIR64_HIPART +#define PAIR64_HIPART(x) (uint32)((uint64(x) >> 32) & UI64LIT(0x00000000FFFFFFFF)) +#define PAIR64_LOPART(x) (uint32)(uint64(x) & UI64LIT(0x00000000FFFFFFFF)) +#endif + class flag96 { private: @@ -333,6 +338,13 @@ public: part[2]=p3; } + flag96(uint64 p1, uint32 p2) + { + part[0]=PAIR64_LOPART(p1); + part[1]=PAIR64_HIPART(p1); + part[2]=p2; + } + inline bool IsEqual(uint32 p1=0, uint32 p2=0, uint32 p3=0) const { return ( diff --git a/src/shared/vmap/CoordModelMapping.cpp b/src/shared/vmap/CoordModelMapping.cpp index 86e3347a614..39d1165f115 100644 --- a/src/shared/vmap/CoordModelMapping.cpp +++ b/src/shared/vmap/CoordModelMapping.cpp @@ -21,7 +21,7 @@ #include "CoordModelMapping.h" #include <string.h> -#include <cstdio> +#include <stdio.h> using namespace G3D; @@ -45,6 +45,13 @@ namespace VMAP return(CMappingEntry::getKeyString(iMapId,xPos, yPos)); } + const std::string CMappingEntry::getKeyString( unsigned int pMapId, int pXPos, int pYPos ) + { + char b[100]; + sprintf(b,"%03u_%d_%d", pMapId, pXPos, pYPos); + return(std::string(b)); + } + //============================================================ //============================================================ //============================================================ diff --git a/src/shared/vmap/CoordModelMapping.h b/src/shared/vmap/CoordModelMapping.h index c1f49462962..7684bf1b373 100644 --- a/src/shared/vmap/CoordModelMapping.h +++ b/src/shared/vmap/CoordModelMapping.h @@ -75,12 +75,7 @@ namespace VMAP const std::string getKeyString() const; inline const G3D::Array<std::string>& getFilenames() const { return(iFilenames); } - static const std::string getKeyString(unsigned int pMapId, int pXPos, int pYPos) - { - char b[100]; - sprintf(b,"%03u_%d_%d", pMapId, pXPos, pYPos); - return(std::string(b)); - } + static const std::string getKeyString(unsigned int pMapId, int pXPos, int pYPos); }; diff --git a/src/shared/vmap/DebugCmdLogger.cpp b/src/shared/vmap/DebugCmdLogger.cpp index e6b36572c45..c899606045b 100644 --- a/src/shared/vmap/DebugCmdLogger.cpp +++ b/src/shared/vmap/DebugCmdLogger.cpp @@ -21,6 +21,7 @@ #include <cstdio> #include "DebugCmdLogger.h" +#include <stdio.h> using namespace G3D; diff --git a/src/shared/vmap/TileAssembler.cpp b/src/shared/vmap/TileAssembler.cpp index cbaa4e58108..75997a847a2 100644 --- a/src/shared/vmap/TileAssembler.cpp +++ b/src/shared/vmap/TileAssembler.cpp @@ -243,7 +243,7 @@ namespace VMAP char destnamebuffer[500]; char fullnamedestnamebuffer[500]; - + if(nameCollection.iMainFiles.size() >0) { sprintf(destnamebuffer,"%03u_%i_%i.vmap",pMapId, pYPos, pXPos); // flip it here too diff --git a/src/shared/vmap/VMapManager.cpp b/src/shared/vmap/VMapManager.cpp index f5c2640be70..342da0eb9e2 100644 --- a/src/shared/vmap/VMapManager.cpp +++ b/src/shared/vmap/VMapManager.cpp @@ -446,7 +446,7 @@ namespace VMAP //========================================================= /** - get height or INVALID_HEIGHT if to hight was calculated + get height or INVALID_HEIGHT if to height was calculated */ //int gGetHeightCounter = 0; |