[PATCH 12/14] Cleanup: consistenty check return value of iostream functions
    Jef Driesen 
    jef at libdivecomputer.org
       
    Wed Jan  3 07:34:15 PST 2018
    
    
  
On 29-12-17 01:35, Dirk Hohndel wrote:
> --- a/src/oceanic_vtpro.c
> +++ b/src/oceanic_vtpro.c
> @@ -269,9 +269,13 @@ oceanic_vtpro_calibrate (oceanic_vtpro_device_t 
> *device)
>   	// device needs approximately 6 seconds to respond.
>   	unsigned char answer[2] = {0};
>   	unsigned char command[2] = {0x18, 0x00};
> -	dc_iostream_set_timeout (device->iostream, 9000);
> -	dc_status_t rc = oceanic_vtpro_transfer (device, command, sizeof 
> (command), answer, sizeof (answer));
> -	dc_iostream_set_timeout (device->iostream, 3000);
> +	dc_status_t rc = dc_iostream_set_timeout (device->iostream, 9000);
> +	if (rc != DC_STATUS_SUCCESS)
> +		return rc;
> +	rc = oceanic_vtpro_transfer (device, command, sizeof (command), 
> answer, sizeof (answer));
> +	if (rc != DC_STATUS_SUCCESS)
> +		return rc;
> +	rc = dc_iostream_set_timeout (device->iostream, 3000);
>   	if (rc != DC_STATUS_SUCCESS)
>   		return rc;
This fix changes the behavior slightly, but that's no longer an issue 
now.
The original intention was that the timeout is always restored, even if 
an error occurred. In the past this was important because the function 
was exposed in the public api and the connection could be re-used after 
a failed call. Nowadays, this is no longer the case,  because it's only 
called internally, and at that point any error is fatal (e.g. no handle 
is returned to the caller, and thus re-using it is simply not possible).
Jef
    
    
More information about the devel
mailing list