diff --git a/panda/src/pstatclient/pStatClientControlMessage.cxx b/panda/src/pstatclient/pStatClientControlMessage.cxx index e7fd765547..5be7fc79f4 100644 --- a/panda/src/pstatclient/pStatClientControlMessage.cxx +++ b/panda/src/pstatclient/pStatClientControlMessage.cxx @@ -60,6 +60,10 @@ encode(Datagram &datagram) const { } break; + case T_expire_thread: + datagram.add_uint16(_first_thread_index); + break; + default: pstats_cat.error() << "Invalid PStatClientControlMessage::Type " << (int)_type << "\n"; @@ -111,6 +115,10 @@ decode(const Datagram &datagram, PStatClientVersion *version) { } break; + case T_expire_thread: + _first_thread_index = source.get_uint16(); + break; + case T_datagram: // Not, strictly speaking, a control message. return false; diff --git a/panda/src/pstatclient/pStatClientControlMessage.h b/panda/src/pstatclient/pStatClientControlMessage.h index 97e7dede98..0cfa572385 100644 --- a/panda/src/pstatclient/pStatClientControlMessage.h +++ b/panda/src/pstatclient/pStatClientControlMessage.h @@ -39,6 +39,7 @@ public: T_hello, T_define_collectors, T_define_threads, + T_expire_thread, T_invalid }; diff --git a/panda/src/pstatclient/pStatFrameData.cxx b/panda/src/pstatclient/pStatFrameData.cxx index d847568e25..af4c71f73e 100644 --- a/panda/src/pstatclient/pStatFrameData.cxx +++ b/panda/src/pstatclient/pStatFrameData.cxx @@ -106,11 +106,16 @@ write_datagram(Datagram &destination, PStatClient *client) const { * Extracts the FrameData definition from the datagram. */ void PStatFrameData:: -read_datagram(DatagramIterator &source, PStatClientVersion *) { +read_datagram(DatagramIterator &source, PStatClientVersion *version) { clear(); { - size_t time_size = source.get_uint16(); + size_t time_size; + if (version->is_at_least(3, 2)) { + time_size = source.get_uint32(); + } else { + time_size = source.get_uint16(); + } _time_data.resize(time_size); for (DataPoint &dp : _time_data) { nassertv(source.get_remaining_size() > 0); @@ -120,7 +125,12 @@ read_datagram(DatagramIterator &source, PStatClientVersion *) { } { - size_t level_size = source.get_uint16(); + size_t level_size; + if (version->is_at_least(3, 2)) { + level_size = source.get_uint32(); + } else { + level_size = source.get_uint16(); + } _level_data.resize(level_size); for (DataPoint &dp : _level_data) { nassertv(source.get_remaining_size() > 0); diff --git a/panda/src/pstatclient/pStatProperties.cxx b/panda/src/pstatclient/pStatProperties.cxx index 9537f50a90..13b36f2ddd 100644 --- a/panda/src/pstatclient/pStatProperties.cxx +++ b/panda/src/pstatclient/pStatProperties.cxx @@ -31,6 +31,7 @@ static const int current_pstat_minor_version = 0; // Incremented to 2.1 on 5/21/01 to add support for TCP frame data. // Incremented to 3.0 on 4/28/05 to bump TCP headers to 32 bits. // Incremented to 3.1 on 11/29/22 to support nested start/stop pairs. +// Incremented to 3.2 on 12/10/22 to use 32-bit data counts, T_expire_thread. /** * Returns the current major version number of the PStats protocol. This is diff --git a/pandatool/src/pstatserver/pStatReader.cxx b/pandatool/src/pstatserver/pStatReader.cxx index 7c1fe6fca5..463e298f7b 100644 --- a/pandatool/src/pstatserver/pStatReader.cxx +++ b/pandatool/src/pstatserver/pStatReader.cxx @@ -194,7 +194,7 @@ handle_client_control_message(const PStatClientControlMessage &message) { if (message._major_version != server_major_version || (message._major_version == server_major_version && message._minor_version > server_minor_version && - (message._major_version != 3 || message._minor_version != 1))) { + (message._major_version != 3 || message._minor_version > 2))) { _monitor->bad_version(message._client_hostname, message._client_progname, message._major_version, message._minor_version, server_major_version, server_minor_version); @@ -225,6 +225,10 @@ handle_client_control_message(const PStatClientControlMessage &message) { } break; + case PStatClientControlMessage::T_expire_thread: + // Ignore for now. + break; + default: nout << "Invalid control message received from client.\n"; }