[pacman-dev] [PATCH] Avoid depending on side effects in assert(...) expressions

Allan McRae allan at archlinux.org
Thu May 14 05:44:30 UTC 2020


On 14/5/20 4:43 am, Dave Reisner wrote:
> When building with -DNDEBUG, assert statements are compiled out to
> no-ops. Thus, we can't depend on assignments or other computations
> occurring inside the assert().
> ---

Thanks.

> It's perhaps worth mentioning that nowhere else in the ALPM codebase
> do we use assert().

Yes - but we really don't have a way to pass back from our callback to
libalpm.  So I am happy with the "shit hit the fan" approach until that
changes.

>  src/pacman/callback.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/src/pacman/callback.c b/src/pacman/callback.c
> index 25909e02..4240a779 100644
> --- a/src/pacman/callback.c
> +++ b/src/pacman/callback.c
> @@ -862,12 +862,14 @@ static void dload_progress_event(const char *filename, alpm_download_event_progr
>  	int64_t curr_time = get_time_ms();
>  	double last_chunk_rate;
>  	int64_t timediff;
> +	bool ok;
>  
>  	if(!dload_progressbar_enabled()) {
>  		return;
>  	}
>  
> -	assert(find_bar_for_filename(filename, &index, &bar));
> +	ok = find_bar_for_filename(filename, &index, &bar);
> +	assert(ok);
>  
>  	/* compute current average values */
>  	timediff = curr_time - bar->sync_time;
> @@ -902,12 +904,14 @@ static void dload_complete_event(const char *filename, alpm_download_event_compl
>  	int index;
>  	struct pacman_progress_bar *bar;
>  	int64_t timediff;
> +	bool ok;
>  
>  	if(!dload_progressbar_enabled()) {
>  		return;
>  	}
>  
> -	assert(find_bar_for_filename(filename, &index, &bar));
> +	ok = find_bar_for_filename(filename, &index, &bar);
> +	assert(ok);
>  	bar->completed = true;
>  
>  	/* This may not have been initialized if the download finished before
> 


More information about the pacman-dev mailing list