diff --git a/userspace/libsinsp/state/dynamic_struct.h b/userspace/libsinsp/state/dynamic_struct.h index 6321a6b8dc..ac1d89c276 100644 --- a/userspace/libsinsp/state/dynamic_struct.h +++ b/userspace/libsinsp/state/dynamic_struct.h @@ -261,7 +261,7 @@ class dynamic_struct { * @brief Accesses a field with the given accessor and reads its value. */ template - inline void get_dynamic_field(const field_accessor& a, Val& out) { + inline void get_dynamic_field(const field_accessor& a, Val& out) const { _check_defsptr(a.info(), false); get_dynamic_field(a.info(), reinterpret_cast(&out)); } @@ -308,7 +308,7 @@ class dynamic_struct { * according to the type definitions supported in libsinsp::state::typeinfo. * For strings, "out" is considered of type const char**. */ - virtual void get_dynamic_field(const field_info& i, void* out) { + virtual void get_dynamic_field(const field_info& i, void* out) const { const auto* buf = _access_dynamic_field(i.m_index); if(i.info().type_id() == SS_PLUGIN_ST_STRING) { *((const char**)out) = ((const std::string*)buf)->c_str(); @@ -360,7 +360,7 @@ class dynamic_struct { } } - inline void* _access_dynamic_field(size_t index) { + inline void* _access_dynamic_field(size_t index) const { if(!m_dynamic_fields) { throw sinsp_exception("dynamic struct has no field definitions"); } @@ -397,7 +397,7 @@ class dynamic_struct { } } - std::vector m_fields; + mutable std::vector m_fields; std::shared_ptr m_dynamic_fields; }; @@ -409,7 +409,7 @@ class dynamic_struct { template<> inline void libsinsp::state::dynamic_struct::get_dynamic_field( const field_accessor& a, - const char*& out) { + const char*& out) const { _check_defsptr(a.info(), false); get_dynamic_field(a.info(), reinterpret_cast(&out)); } @@ -417,7 +417,7 @@ inline void libsinsp::state::dynamic_struct::get_dynamic_field inline void libsinsp::state::dynamic_struct::get_dynamic_field( const field_accessor& a, - std::string& out) { + std::string& out) const { const char* s = NULL; get_dynamic_field(a, s); if(!s) { diff --git a/userspace/libsinsp/state/table_adapters.h b/userspace/libsinsp/state/table_adapters.h index 27fcaf2410..219c964fdb 100644 --- a/userspace/libsinsp/state/table_adapters.h +++ b/userspace/libsinsp/state/table_adapters.h @@ -83,7 +83,8 @@ class pair_table_entry_adapter : public libsinsp::state::table_entry { inline void set_value(std::pair* v) { m_value = v; } protected: - virtual void get_dynamic_field(const dynamic_struct::field_info& i, void* out) override final { + virtual void get_dynamic_field(const dynamic_struct::field_info& i, + void* out) const override final { if(i.index() > 1 || i.defs_id() != s_dynamic_fields_id) { throw sinsp_exception( "invalid field info passed to pair_table_entry_adapter::get_dynamic_field"); @@ -115,7 +116,9 @@ class pair_table_entry_adapter : public libsinsp::state::table_entry { std::pair* m_value; template - inline void get_dynamic_field(const dynamic_struct::field_info& i, const T* value, void* out) { + inline void get_dynamic_field(const dynamic_struct::field_info& i, + const T* value, + void* out) const { if(i.info().type_id() == SS_PLUGIN_ST_STRING) { *((const char**)out) = ((const std::string*)value)->c_str(); } else { @@ -169,7 +172,8 @@ class value_table_entry_adapter : public libsinsp::state::table_entry { inline void set_value(T* v) { m_value = v; } protected: - virtual void get_dynamic_field(const dynamic_struct::field_info& i, void* out) override final { + virtual void get_dynamic_field(const dynamic_struct::field_info& i, + void* out) const override final { if(i.index() != 0 || i.defs_id() != s_dynamic_fields_id) { throw sinsp_exception( "invalid field info passed to value_table_entry_adapter::get_dynamic_field"); diff --git a/userspace/libsinsp/threadinfo.cpp b/userspace/libsinsp/threadinfo.cpp index e10257445a..ebe6f764ce 100644 --- a/userspace/libsinsp/threadinfo.cpp +++ b/userspace/libsinsp/threadinfo.cpp @@ -407,7 +407,7 @@ std::string sinsp_threadinfo::get_exepath() const { return m_exepath; } -std::string sinsp_threadinfo::get_container_id() { +std::string sinsp_threadinfo::get_container_id() const { std::string container_id; const auto accessor = m_params->thread_manager->get_field_accessor( diff --git a/userspace/libsinsp/threadinfo.h b/userspace/libsinsp/threadinfo.h index eb08780a5f..d86811b075 100644 --- a/userspace/libsinsp/threadinfo.h +++ b/userspace/libsinsp/threadinfo.h @@ -115,7 +115,7 @@ class SINSP_PUBLIC sinsp_threadinfo : public libsinsp::state::table_entry { \brief Return the container_id associated with this thread, if the container plugins is running, leveraging sinsp state table API. */ - std::string get_container_id(); + std::string get_container_id() const; /*! \brief Given the container_id associated with this thread, feetches the container user from