diff --git a/modules/surface/private/linux/system.cpp b/modules/surface/private/linux/system.cpp index 351a9f0..b98ec6e 100644 --- a/modules/surface/private/linux/system.cpp +++ b/modules/surface/private/linux/system.cpp @@ -11,6 +11,9 @@ #include #include +// +#include + namespace lt::surface { template @@ -165,9 +168,14 @@ try XSetWMProtocols(display, main_window, &surface.m_native_data.wm_delete_message, 1); // code to remove decoration - auto hints = std::array { 2, 0, 0, 0, 0 }; + auto hints = std::array { 2, 0, 0, 0, 0 }; const auto motif_hints = XInternAtom(display, "_MOTIF_WM_HINTS", False); +#if defined(__clang__) && __has_feature(memory_sanitizer) + auto bytes = (size_t)(1u) * (size_t)hints.size(); + __msan_unpoison((void *)hints.data(), bytes); +#endif + XChangeProperty( display, surface.m_native_data.window, diff --git a/modules/surface/public/system.hpp b/modules/surface/public/system.hpp index bc92cdc..6993d49 100644 --- a/modules/surface/public/system.hpp +++ b/modules/surface/public/system.hpp @@ -27,7 +27,7 @@ public: void on_unregister() override; - __attribute__((no_sanitize_memory)) void create_surface_component( + __attribute__((no_sanitize("memory"))) void create_surface_component( ecs::EntityId entity, SurfaceComponent::CreateInfo info ); @@ -40,35 +40,35 @@ public: } private: - __attribute__((no_sanitize_memory)) void on_surface_destruct( - ecs::Registry ®istry, - ecs::EntityId entity - ); + void on_surface_destruct(ecs::Registry ®istry, ecs::EntityId entity); void handle_requests(struct SurfaceComponent &surface); void handle_events(struct SurfaceComponent &surface); - __attribute__((no_sanitize_memory)) void modify_title( - struct SurfaceComponent &surface, - const struct ModifyTitleRequest &request - ); + void modify_title(struct SurfaceComponent &surface, const struct ModifyTitleRequest &request); - __attribute__((no_sanitize_memory)) void modify_resolution( + __attribute__((no_sanitize("memory"))) void modify_resolution( struct SurfaceComponent &surface, const struct ModifyResolutionRequest &request ); - __attribute__((no_sanitize_memory)) void modify_position( + __attribute__((no_sanitize("memory"))) void modify_position( struct SurfaceComponent &surface, const struct ModifyPositionRequest &request ); - __attribute__((no_sanitize_memory)) void modify_visiblity( + void modify_visiblity( struct SurfaceComponent &surface, const struct ModifyVisibilityRequest &request ); + void modify_position(ecs::EntityId surface_entity, const math::ivec2 &new_size); + + void modify_position(ecs::EntityId surface_entity, const math::uvec2 &new_size); + + void set_visibility(ecs::EntityId surface_entity, bool visible); + memory::Ref m_registry; app::TickResult m_last_tick_result; diff --git a/tools/ci/amd64/clang/msan.supp b/tools/ci/amd64/clang/msan.supp index 11ab858..e69de29 100644 --- a/tools/ci/amd64/clang/msan.supp +++ b/tools/ci/amd64/clang/msan.supp @@ -1,26 +0,0 @@ -# --- Ignore X11 (libX11) --- -fun:_XData32 -fun:_XSend -fun:_XFlush -fun:XChangeProperty -fun:XFlush - -obj:/msan/lib/libX11.so -obj:/msan/lib/libX11.so.6 - -# --- Ignore XCB (libxcb) --- -fun:write_vec -fun:_xcb_conn_wait -fun:_xcb_out_send -fun:xcb_writev - -obj:/msan/lib/libxcb.so -obj:/msan/lib/libxcb.so.1 - -# --- Ignore local forwarding/interceptors --- -fun:read_iovec -fun:writev - -# --- (Optional) ignore your wrapper to avoid noise --- -fun:lt::surface::System::create_surface_component -