aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Database/QueryHolder.cpp
diff options
context:
space:
mode:
authorjackpoz <giacomopoz@gmail.com>2013-11-02 22:57:07 +0100
committerjackpoz <giacomopoz@gmail.com>2013-11-02 22:57:07 +0100
commit6d794ab305fbec169251a7c43c7364a20f461295 (patch)
tree4f5e1c384ace709f8fe7ffe6f36e379e0dbf8462 /src/server/shared/Database/QueryHolder.cpp
parentca34b701cb55b64bb4fcac7e395edee927572ffc (diff)
Core/Database: Add additional assert
Add additional assert to assure that helgrind reports related to SQLQueryHolderTask::Execute() and WorldSession::ProcessQueryCallbacks() are false positives. The only chance for WorldSession::ProcessQueryCallbacks() to access the SQL queries before they are completed is if m_result.ready() is true before the end of SQLQueryHolderTask::Execute() . Helgrind false positive log: Possible data race during read of size 8 at 0x2BD641E0 by thread #7 Locks held: none at : SQLQueryHolder::GetPreparedResult(unsigned long) (QueryHolder.cpp:107) by : Player::LoadFromDB(unsigned int, SQLQueryHolder*) (Player.cpp:16917) by : WorldSession::HandlePlayerLogin(LoginQueryHolder*) (CharacterHandler.cpp:807) by : WorldSession::ProcessQueryCallbacks() (WorldSession.cpp:1112) by : WorldSession::Update(unsigned int, PacketFilter&) (WorldSession.cpp:401) by : World::UpdateSessions(unsigned int) (World.cpp:2646) by : World::Update(unsigned int) (World.cpp:2003) by : WorldRunnable::run() (WorldRunnable.cpp:60) by : ACE_Based::Thread::ThreadTask(void*) (Threading.cpp:186) by : ACE_OS_Thread_Adapter::invoke() (in /usr/lib/libACE-6.0.3.so) by : mythread_wrapper (hg_intercepts.c:233) by : start_thread (pthread_create.c:311) This conflicts with a previous write of size 8 by thread #4 Locks held: none at : SQLQueryHolder::SetPreparedResult(unsigned long, PreparedResultSet*) (QueryHolder.cpp:140) by : SQLQueryHolderTask::Execute() (QueryHolder.cpp:196) by : SQLOperation::call() (SQLOperation.h:65) by : DatabaseWorker::svc() (DatabaseWorker.cpp:45) by : ACE_Task_Base::svc_run(void*) (in /usr/lib/libACE-6.0.3.so) by : ACE_Thread_Adapter::invoke_i() (in /usr/lib/libACE-6.0.3.so) by : ACE_Thread_Adapter::invoke() (in /usr/lib/libACE-6.0.3.so) by : mythread_wrapper (hg_intercepts.c:233) Address 0x2BD641E0 is 16 bytes inside a block of size 792 alloc'd at : operator new(unsigned long) (vg_replace_malloc.c:319) by : __gnu_cxx::new_allocator<std::pair<SQLElementData, SQLResultSetUnion> >::allocate(unsigned long, void const*) (new_allocator.h:104) by : std::_Vector_base<std::pair<SQLElementData, SQLResultSetUnion>, std::allocator<std::pair<SQLElementData, SQLResultSetUnion> > >::_M_allocate(unsigned long) (in /home/jackpoz/trinity/bin/worldserver) by : std::vector<std::pair<SQLElementData, SQLResultSetUnion>, std::allocator<std::pair<SQLElementData, SQLResultSetUnion> > >::_M_fill_insert(__gnu_cxx::__normal_iterator<std::pair<SQLElementData, SQLResultSetUnion>*, std::vector<std::pair<SQLElementData, SQLResultSetUnion>, std::allocator<std::pair<SQLElementData, SQLResultSetUnion> > > >, unsigned long, std::pair<SQLElementData, SQLResultSetUnion> const&) (vector.tcc:483) by : std::vector<std::pair<SQLElementData, SQLResultSetUnion>, std::allocator<std::pair<SQLElementData, SQLResultSetUnion> > >::insert(__gnu_cxx::__normal_iterator<std::pair<SQLElementData, SQLResultSetUnion>*, std::vector<std::pair<SQLElementData, SQLResultSetUnion>, std::allocator<std::pair<SQLElementData, SQLResultSetUnion> > > >, unsigned long, std::pair<SQLElementData, SQLResultSetUnion> const&) (stl_vector.h:1024) by : std::vector<std::pair<SQLElementData, SQLResultSetUnion>, std::allocator<std::pair<SQLElementData, SQLResultSetUnion> > >::resize(unsigned long, std::pair<SQLElementData, SQLResultSetUnion>) (stl_vector.h:707) by : SQLQueryHolder::SetSize(unsigned long) (QueryHolder.cpp:167) by : LoginQueryHolder::Initialize() (CharacterHandler.cpp:66) by : WorldSession::HandlePlayerLoginOpcode(WorldPacket&) (CharacterHandler.cpp:788) by : WorldSession::Update(unsigned int, PacketFilter&) (WorldSession.cpp:363) by : World::UpdateSessions(unsigned int) (World.cpp:2646) by : World::Update(unsigned int) (World.cpp:2003)
Diffstat (limited to 'src/server/shared/Database/QueryHolder.cpp')
-rw-r--r--src/server/shared/Database/QueryHolder.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/server/shared/Database/QueryHolder.cpp b/src/server/shared/Database/QueryHolder.cpp
index 0a7c19af6d0..31a464ed165 100644
--- a/src/server/shared/Database/QueryHolder.cpp
+++ b/src/server/shared/Database/QueryHolder.cpp
@@ -169,6 +169,9 @@ void SQLQueryHolder::SetSize(size_t size)
bool SQLQueryHolderTask::Execute()
{
+ //the result can't be ready as we are processing it right now
+ ASSERT(!m_result.ready());
+
if (!m_holder)
return false;