diff --git a/plugins/platforms/drm/drm_object.cpp b/plugins/platforms/drm/drm_object.cpp --- a/plugins/platforms/drm/drm_object.cpp +++ b/plugins/platforms/drm/drm_object.cpp @@ -18,6 +18,7 @@ along with this program. If not, see . *********************************************************************/ #include "drm_object.h" +#include "drm_pointer.h" #include "logging.h" @@ -49,16 +50,16 @@ void DrmObject::initProp(int n, drmModeObjectProperties *properties, QVector enumNames) { for (unsigned int i = 0; i < properties->count_props; ++i) { - drmModePropertyRes *prop = drmModeGetProperty(fd(), properties->props[i]); + ScopedDrmPointer prop( + drmModeGetProperty(fd(), properties->props[i])); if (!prop) { continue; } if (prop->name == m_propsNames[n]) { qCDebug(KWIN_DRM).nospace() << m_id << ": " << prop->name << "' (id " << prop->prop_id << "): " << properties->prop_values[i]; - m_props[n] = new Property(prop, properties->prop_values[i], enumNames); + m_props[n] = new Property(prop.data(), properties->prop_values[i], enumNames); } - drmModeFreeProperty(prop); } } diff --git a/plugins/platforms/drm/drm_object_connector.cpp b/plugins/platforms/drm/drm_object_connector.cpp --- a/plugins/platforms/drm/drm_object_connector.cpp +++ b/plugins/platforms/drm/drm_object_connector.cpp @@ -54,17 +54,18 @@ QByteArrayLiteral("CRTC_ID"), }); - drmModeObjectProperties *properties = drmModeObjectGetProperties(fd(), m_id, DRM_MODE_OBJECT_CONNECTOR); + ScopedDrmPointer properties( + drmModeObjectGetProperties(fd(), m_id, DRM_MODE_OBJECT_CONNECTOR)); if (!properties) { qCWarning(KWIN_DRM) << "Failed to get properties for connector " << m_id ; return false; } int propCount = int(PropertyIndex::Count); for (int j = 0; j < propCount; ++j) { - initProp(j, properties); + initProp(j, properties.data()); } - drmModeFreeObjectProperties(properties); + return true; } diff --git a/plugins/platforms/drm/drm_object_crtc.cpp b/plugins/platforms/drm/drm_object_crtc.cpp --- a/plugins/platforms/drm/drm_object_crtc.cpp +++ b/plugins/platforms/drm/drm_object_crtc.cpp @@ -21,6 +21,7 @@ #include "drm_backend.h" #include "drm_output.h" #include "drm_buffer.h" +#include "drm_pointer.h" #include "logging.h" #include @@ -59,17 +60,18 @@ QByteArrayLiteral("ACTIVE"), }); - drmModeObjectProperties *properties = drmModeObjectGetProperties(fd(), m_id, DRM_MODE_OBJECT_CRTC); + ScopedDrmPointer properties( + drmModeObjectGetProperties(fd(), m_id, DRM_MODE_OBJECT_CRTC)); if (!properties) { qCWarning(KWIN_DRM) << "Failed to get properties for crtc " << m_id ; return false; } int propCount = int(PropertyIndex::Count); for (int j = 0; j < propCount; ++j) { - initProp(j, properties); + initProp(j, properties.data()); } - drmModeFreeObjectProperties(properties); + return true; } diff --git a/plugins/platforms/drm/drm_object_plane.cpp b/plugins/platforms/drm/drm_object_plane.cpp --- a/plugins/platforms/drm/drm_object_plane.cpp +++ b/plugins/platforms/drm/drm_object_plane.cpp @@ -92,18 +92,19 @@ QByteArrayLiteral("reflect-y") }; - drmModeObjectProperties *properties = drmModeObjectGetProperties(fd(), m_id, DRM_MODE_OBJECT_PLANE); + ScopedDrmPointer properties( + drmModeObjectGetProperties(fd(), m_id, DRM_MODE_OBJECT_PLANE)); if (!properties){ qCWarning(KWIN_DRM) << "Failed to get properties for plane " << m_id ; return false; } int propCount = int(PropertyIndex::Count); for (int j = 0; j < propCount; ++j) { if (j == int(PropertyIndex::Type)) { - initProp(j, properties, typeNames); + initProp(j, properties.data(), typeNames); } else if (j == int(PropertyIndex::Rotation)) { - initProp(j, properties, rotationNames); + initProp(j, properties.data(), rotationNames); m_supportedTransformations = Transformations(); auto testTransform = [j, this] (uint64_t value, Transformation t) { if (propHasEnum(j, value)) { @@ -118,11 +119,10 @@ testTransform(5, Transformation::ReflectY); qCDebug(KWIN_DRM) << "Supported Transformations: " << m_supportedTransformations << " on plane " << m_id; } else { - initProp(j, properties); + initProp(j, properties.data()); } } - drmModeFreeObjectProperties(properties); return true; }