diff --git a/client/TracyProfiler.cpp b/client/TracyProfiler.cpp index bf5d8a31..5cbce936 100644 --- a/client/TracyProfiler.cpp +++ b/client/TracyProfiler.cpp @@ -2313,17 +2313,15 @@ void Profiler::SendCallstackFrame( uint64_t ptr ) } -static bool DontExit() { return false; } - bool Profiler::HandleServerQuery() { uint8_t type; uint64_t ptr; uint32_t extra; - if( !m_sock->Read( &type, sizeof( type ), 10, DontExit ) ) return false; - if( !m_sock->Read( &ptr, sizeof( ptr ), 10, DontExit ) ) return false; - if( !m_sock->Read( &extra, sizeof( extra ), 10, DontExit ) ) return false; + if( !m_sock->Read( &type, sizeof( type ), 10 ) ) return false; + if( !m_sock->Read( &ptr, sizeof( ptr ), 10 ) ) return false; + if( !m_sock->Read( &extra, sizeof( extra ), 10 ) ) return false; switch( type ) { diff --git a/common/TracySocket.cpp b/common/TracySocket.cpp index acbc9045..816eb35a 100644 --- a/common/TracySocket.cpp +++ b/common/TracySocket.cpp @@ -221,6 +221,16 @@ int Socket::Recv( void* _buf, int len, int timeout ) } } +bool Socket::Read( void* buf, int len, int timeout ) +{ + auto cbuf = (char*)buf; + while( len > 0 ) + { + if( !ReadImpl( cbuf, len, timeout ) ) return false; + } + return true; +} + bool Socket::ReadImpl( char*& buf, int& len, int timeout ) { const auto sz = RecvBuffered( buf, len, timeout ); diff --git a/common/TracySocket.hpp b/common/TracySocket.hpp index 4192596a..3635fce7 100644 --- a/common/TracySocket.hpp +++ b/common/TracySocket.hpp @@ -27,6 +27,8 @@ public: int Send( const void* buf, int len ); int GetSendBufSize(); + bool Read( void* buf, int len, int timeout ); + template bool Read( void* buf, int len, int timeout, ShouldExit exitCb ) {