From ea2c3295109d07cd676e4faffc88197d1f97bc1d Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Thu, 7 Nov 2019 01:29:11 +0100 Subject: [PATCH] Input data *must not* be changed. Not even for a short moment. --- server/TracyWorker.cpp | 28 ++++++++++++++-------------- server/TracyWorker.hpp | 26 +++++++++++++------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index a2d564e7..ff5cd9df 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -2522,7 +2522,7 @@ void Worker::Exec() } if( netbuf.bufferOffset < 0 ) goto close; - char* ptr = m_buffer + netbuf.bufferOffset; + const char* ptr = m_buffer + netbuf.bufferOffset; const char* end = ptr + netbuf.size; { @@ -2623,7 +2623,7 @@ void Worker::QueryTerminate() m_sock.Send( &query, ServerQueryPacketSize ); } -bool Worker::DispatchProcess( const QueueItem& ev, char*& ptr ) +bool Worker::DispatchProcess( const QueueItem& ev, const char*& ptr ) { if( ev.hdr.idx >= (int)QueueType::StringData ) { @@ -2991,7 +2991,7 @@ void Worker::AddSourceLocation( const QueueSourceLocation& srcloc ) it->second = SourceLocation { srcloc.name == 0 ? StringRef() : StringRef( StringRef::Ptr, srcloc.name ), StringRef( StringRef::Ptr, srcloc.function ), StringRef( StringRef::Ptr, srcloc.file ), srcloc.line, color }; } -void Worker::AddSourceLocationPayload( uint64_t ptr, char* data, size_t sz ) +void Worker::AddSourceLocationPayload( uint64_t ptr, const char* data, size_t sz ) { const auto start = data; @@ -3046,7 +3046,7 @@ void Worker::AddSourceLocationPayload( uint64_t ptr, char* data, size_t sz ) } } -void Worker::AddString( uint64_t ptr, char* str, size_t sz ) +void Worker::AddString( uint64_t ptr, const char* str, size_t sz ) { assert( m_pendingStrings > 0 ); m_pendingStrings--; @@ -3056,7 +3056,7 @@ void Worker::AddString( uint64_t ptr, char* str, size_t sz ) it->second = sl.ptr; } -void Worker::AddThreadString( uint64_t id, char* str, size_t sz ) +void Worker::AddThreadString( uint64_t id, const char* str, size_t sz ) { assert( m_pendingThreads > 0 ); m_pendingThreads--; @@ -3066,13 +3066,13 @@ void Worker::AddThreadString( uint64_t id, char* str, size_t sz ) it->second = sl.ptr; } -void Worker::AddCustomString( uint64_t ptr, char* str, size_t sz ) +void Worker::AddCustomString( uint64_t ptr, const char* str, size_t sz ) { assert( m_pendingCustomStrings.find( ptr ) == m_pendingCustomStrings.end() ); m_pendingCustomStrings.emplace( ptr, StoreString( str, sz ) ); } -void Worker::AddExternalName( uint64_t ptr, char* str, size_t sz ) +void Worker::AddExternalName( uint64_t ptr, const char* str, size_t sz ) { assert( m_pendingExternalNames > 0 ); m_pendingExternalNames--; @@ -3082,7 +3082,7 @@ void Worker::AddExternalName( uint64_t ptr, char* str, size_t sz ) it->second.first = sl.ptr; } -void Worker::AddExternalThreadName( uint64_t ptr, char* str, size_t sz ) +void Worker::AddExternalThreadName( uint64_t ptr, const char* str, size_t sz ) { assert( m_pendingExternalNames > 0 ); m_pendingExternalNames--; @@ -3111,7 +3111,7 @@ static const uint8_t DxtcIndexTable[256] = { 5, 7, 6, 4, 13, 15, 14, 12, 9, 11, 10, 8, 1, 3, 2, 0 }; -void Worker::AddFrameImageData( uint64_t ptr, char* data, size_t sz ) +void Worker::AddFrameImageData( uint64_t ptr, const char* data, size_t sz ) { assert( m_pendingFrameImageData.find( ptr ) == m_pendingFrameImageData.end() ); assert( sz % 8 == 0 ); @@ -3142,7 +3142,7 @@ uint64_t Worker::GetCanonicalPointer( const CallstackFrameId& id ) const return ( id.idx & 0x7FFFFFFFFFFFFFFF ) | ( ( id.idx & 0x4000000000000000 ) << 1 ); } -void Worker::AddCallstackPayload( uint64_t ptr, char* _data, size_t _sz ) +void Worker::AddCallstackPayload( uint64_t ptr, const char* _data, size_t _sz ) { assert( m_pendingCallstackPtr == 0 ); @@ -3189,7 +3189,7 @@ void Worker::AddCallstackPayload( uint64_t ptr, char* _data, size_t _sz ) m_pendingCallstackId = idx; } -void Worker::AddCallstackAllocPayload( uint64_t ptr, char* data, size_t _sz ) +void Worker::AddCallstackAllocPayload( uint64_t ptr, const char* data, size_t _sz ) { assert( m_pendingCallstackPtr != 0 ); @@ -3298,7 +3298,7 @@ void Worker::InsertPlot( PlotData* plot, int64_t time, double val ) } } -void Worker::HandlePlotName( uint64_t name, char* str, size_t sz ) +void Worker::HandlePlotName( uint64_t name, const char* str, size_t sz ) { const auto sl = StoreString( str, sz ); m_data.plots.StringDiscovered( name, sl, m_data.strings, [this] ( PlotData* dst, PlotData* src ) { @@ -3309,7 +3309,7 @@ void Worker::HandlePlotName( uint64_t name, char* str, size_t sz ) } ); } -void Worker::HandleFrameName( uint64_t name, char* str, size_t sz ) +void Worker::HandleFrameName( uint64_t name, const char* str, size_t sz ) { const auto sl = StoreString( str, sz ); m_data.frames.StringDiscovered( name, sl, m_data.strings, [] ( FrameData* dst, FrameData* src ) { @@ -3342,7 +3342,7 @@ void Worker::HandlePostponedPlots() } } -StringLocation Worker::StoreString( char* str, size_t sz ) +StringLocation Worker::StoreString( const char* str, size_t sz ) { StringLocation ret; charutil::StringKey key = { str, sz }; diff --git a/server/TracyWorker.hpp b/server/TracyWorker.hpp index b192997e..c9f3ddde 100644 --- a/server/TracyWorker.hpp +++ b/server/TracyWorker.hpp @@ -425,7 +425,7 @@ private: void Query( ServerQuery type, uint64_t data ); void QueryTerminate(); - tracy_force_inline bool DispatchProcess( const QueueItem& ev, char*& ptr ); + tracy_force_inline bool DispatchProcess( const QueueItem& ev, const char*& ptr ); tracy_force_inline bool Process( const QueueItem& ev ); tracy_force_inline void ProcessThreadContext( const QueueThreadContext& ev ); tracy_force_inline void ProcessZoneBegin( const QueueZoneBegin& ev ); @@ -544,25 +544,25 @@ private: void CheckExternalName( uint64_t id ); void AddSourceLocation( const QueueSourceLocation& srcloc ); - void AddSourceLocationPayload( uint64_t ptr, char* data, size_t sz ); + void AddSourceLocationPayload( uint64_t ptr, const char* data, size_t sz ); - void AddString( uint64_t ptr, char* str, size_t sz ); - void AddThreadString( uint64_t id, char* str, size_t sz ); - void AddCustomString( uint64_t ptr, char* str, size_t sz ); - void AddExternalName( uint64_t ptr, char* str, size_t sz ); - void AddExternalThreadName( uint64_t ptr, char* str, size_t sz ); - void AddFrameImageData( uint64_t ptr, char* data, size_t sz ); + void AddString( uint64_t ptr, const char* str, size_t sz ); + void AddThreadString( uint64_t id, const char* str, size_t sz ); + void AddCustomString( uint64_t ptr, const char* str, size_t sz ); + void AddExternalName( uint64_t ptr, const char* str, size_t sz ); + void AddExternalThreadName( uint64_t ptr, const char* str, size_t sz ); + void AddFrameImageData( uint64_t ptr, const char* data, size_t sz ); - tracy_force_inline void AddCallstackPayload( uint64_t ptr, char* data, size_t sz ); - tracy_force_inline void AddCallstackAllocPayload( uint64_t ptr, char* data, size_t sz ); + tracy_force_inline void AddCallstackPayload( uint64_t ptr, const char* data, size_t sz ); + tracy_force_inline void AddCallstackAllocPayload( uint64_t ptr, const char* data, size_t sz ); void InsertPlot( PlotData* plot, int64_t time, double val ); - void HandlePlotName( uint64_t name, char* str, size_t sz ); - void HandleFrameName( uint64_t name, char* str, size_t sz ); + void HandlePlotName( uint64_t name, const char* str, size_t sz ); + void HandleFrameName( uint64_t name, const char* str, size_t sz ); void HandlePostponedPlots(); - StringLocation StoreString( char* str, size_t sz ); + StringLocation StoreString( const char* str, size_t sz ); const ContextSwitch* const GetContextSwitchDataImpl( uint64_t thread ); tracy_force_inline Vector>& GetZoneChildrenMutable( int32_t idx ) { return m_data.zoneChildren[idx]; }