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;
}