[PATCH i-g-t 1/2] lib/igt_chamelium: check drmModeGetConnector() return value in wait_for_connected_state()

Kamil Konieczny kamil.konieczny at linux.intel.com
Thu May 23 10:20:19 UTC 2024


Hi Luca,
On 2024-05-23 at 11:44:25 +0300, Luca Coelho wrote:
> The drmModeGetConnector() function can return NULL in some cases, so
> we need to check the return value before accessing it.  This is not
> being checked in wait_for_connected_state(), so fix that.
> 
> Signed-off-by: Luca Coelho <luciano.coelho at intel.com>
> ---
>  lib/igt_chamelium.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/lib/igt_chamelium.c b/lib/igt_chamelium.c
> index 016d5356630c..b1478654d02a 100644
> --- a/lib/igt_chamelium.c
> +++ b/lib/igt_chamelium.c
> @@ -524,6 +524,9 @@ static bool wait_for_connected_state(int drm_fd,
>  			drmModeConnector *connector =
>  				drmModeGetConnector(drm_fd, connectors[i]);
>  
> +			if (!connector)
> +				break;

Why break? btw please document what is that function
tring to do, it looks strange.

Is it:
wait for one connector to enter connected state
or
wait for all connectors to be connected?

See below.

> +
>  			connected = connector->connection == DRM_MODE_CONNECTED;
>  
>  			drmModeFreeConnector(connector);
> -- 
> 2.39.2
> 

Some comments on this function code:

igt_until_timeout(CHAMELIUM_HOTPLUG_DETECTION_DELAY) {
    bool connected;

    for (int i = 0; i < connector_count; i++) {
        drmModeConnector *connector = drmModeGetConnector(drm_fd, connectors[i]);

		if (!connector)
				continue;

        connected = connector->connection == DRM_MODE_CONNECTED;
        drmModeFreeConnector(connector);

        if (!connected)
------------^
            break;
------------^
Why break here? imho this should be:

        if (connected)
            return true;

        }

    if (connected)
------------^
        return true;

This if(..)... could be then deleted.

    usleep(50000);
}

Regards,
Kamil




More information about the igt-dev mailing list