aboutsummaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/Common.h4
-rw-r--r--src/shared/Database/Database.h2
-rw-r--r--src/shared/Database/DatabaseEnv.h2
-rw-r--r--src/shared/Database/DatabaseMysql.cpp4
-rw-r--r--src/shared/Database/DatabasePostgre.cpp4
-rw-r--r--src/shared/Database/QueryResultPostgre.h4
-rw-r--r--src/shared/Database/SQLStorage.cpp2
-rw-r--r--src/shared/Database/SQLStorage.h2
-rw-r--r--src/shared/Errors.h19
-rw-r--r--src/shared/LockedQueue.h59
-rw-r--r--src/shared/Log.cpp12
-rw-r--r--src/shared/ProgressBar.cpp2
-rw-r--r--src/shared/ProgressBar.h1
-rw-r--r--src/shared/Threading.cpp36
-rw-r--r--src/shared/Threading.h12
-rw-r--r--src/shared/Util.cpp2
-rw-r--r--src/shared/Util.h12
-rw-r--r--src/shared/vmap/CoordModelMapping.cpp9
-rw-r--r--src/shared/vmap/CoordModelMapping.h7
-rw-r--r--src/shared/vmap/DebugCmdLogger.cpp1
-rw-r--r--src/shared/vmap/TileAssembler.cpp2
-rw-r--r--src/shared/vmap/VMapManager.cpp2
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;