compositor-drm: Consistent failure paths for output creation
Rather than a smattering of error handlers, use consistent jump labels for error paths in create_output_for_connector(). Signed-off-by: Daniel Stone <daniels@collabora.com> Reported-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
This commit is contained in:
+14
-10
@@ -4292,7 +4292,8 @@ drm_output_destroy(struct weston_output *base)
|
|||||||
*/
|
*/
|
||||||
if (output->cursor_plane)
|
if (output->cursor_plane)
|
||||||
drm_plane_destroy(output->cursor_plane);
|
drm_plane_destroy(output->cursor_plane);
|
||||||
drm_plane_destroy(output->scanout_plane);
|
if (output->scanout_plane)
|
||||||
|
drm_plane_destroy(output->scanout_plane);
|
||||||
}
|
}
|
||||||
|
|
||||||
wl_list_for_each_safe(drm_mode, next, &output->base.mode_list,
|
wl_list_for_each_safe(drm_mode, next, &output->base.mode_list,
|
||||||
@@ -4436,12 +4437,12 @@ create_output_for_connector(struct drm_backend *b,
|
|||||||
i = find_crtc_for_connector(b, resources, connector);
|
i = find_crtc_for_connector(b, resources, connector);
|
||||||
if (i < 0) {
|
if (i < 0) {
|
||||||
weston_log("No usable crtc/encoder pair for connector.\n");
|
weston_log("No usable crtc/encoder pair for connector.\n");
|
||||||
goto err;
|
goto err_init;
|
||||||
}
|
}
|
||||||
|
|
||||||
output = zalloc(sizeof *output);
|
output = zalloc(sizeof *output);
|
||||||
if (output == NULL)
|
if (output == NULL)
|
||||||
goto err;
|
goto err_init;
|
||||||
|
|
||||||
output->connector = connector;
|
output->connector = connector;
|
||||||
output->crtc_id = resources->crtcs[i];
|
output->crtc_id = resources->crtcs[i];
|
||||||
@@ -4468,7 +4469,7 @@ create_output_for_connector(struct drm_backend *b,
|
|||||||
DRM_MODE_OBJECT_CONNECTOR);
|
DRM_MODE_OBJECT_CONNECTOR);
|
||||||
if (!props) {
|
if (!props) {
|
||||||
weston_log("failed to get connector properties\n");
|
weston_log("failed to get connector properties\n");
|
||||||
goto err;
|
goto err_output;
|
||||||
}
|
}
|
||||||
drm_property_info_populate(b, connector_props, output->props_conn,
|
drm_property_info_populate(b, connector_props, output->props_conn,
|
||||||
WDRM_CONNECTOR__COUNT, props);
|
WDRM_CONNECTOR__COUNT, props);
|
||||||
@@ -4493,8 +4494,8 @@ create_output_for_connector(struct drm_backend *b,
|
|||||||
for (i = 0; i < output->connector->count_modes; i++) {
|
for (i = 0; i < output->connector->count_modes; i++) {
|
||||||
drm_mode = drm_output_add_mode(output, &output->connector->modes[i]);
|
drm_mode = drm_output_add_mode(output, &output->connector->modes[i]);
|
||||||
if (!drm_mode) {
|
if (!drm_mode) {
|
||||||
drm_output_destroy(&output->base);
|
weston_log("failed to add mode\n");
|
||||||
return -1;
|
goto err_output;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4504,8 +4505,7 @@ create_output_for_connector(struct drm_backend *b,
|
|||||||
if (!output->scanout_plane) {
|
if (!output->scanout_plane) {
|
||||||
weston_log("Failed to find primary plane for output %s\n",
|
weston_log("Failed to find primary plane for output %s\n",
|
||||||
output->base.name);
|
output->base.name);
|
||||||
drm_output_destroy(&output->base);
|
goto err_output;
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Failing to find a cursor plane is not fatal, as we'll fall back
|
/* Failing to find a cursor plane is not fatal, as we'll fall back
|
||||||
@@ -4518,9 +4518,13 @@ create_output_for_connector(struct drm_backend *b,
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err:
|
err_output:
|
||||||
drmModeFreeConnector(connector);
|
drm_output_destroy(&output->base);
|
||||||
|
return -1;
|
||||||
|
/* no fallthrough! */
|
||||||
|
|
||||||
|
err_init:
|
||||||
|
drmModeFreeConnector(connector);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user