Re: more unconstify use - Mailing list pgsql-hackers

From Peter Eisentraut
Subject Re: more unconstify use
Date
Msg-id a87f0cb6-8864-485d-4c89-f534bed9c447@2ndquadrant.com
Whole thread Raw
In response to Re: more unconstify use  (Mark Dilger <hornschnorter@gmail.com>)
List pgsql-hackers
On 13/02/2019 19:51, Mark Dilger wrote:
> Peter, so sorry I did not review this patch before you committed.  There
> are a few places where you unconstify the argument to a function where
> changing the function to take const seems better to me.  I argued for
> something similar in 2016,

One can consider unconstify a "todo" marker.  Some of these could be
removed by some API changes.  It needs case-by-case consideration.

> Your change:
> 
> -            md5_calc((uint8 *) (input + i), ctxt);
> +            md5_calc(unconstify(uint8 *, (input + i)), ctxt);
> 
> Perhaps md5_calc's signature should change to
> 
>     md5_calc(const uint8 *, md5_ctxt *)
> 
> since it doesn't modify the first argument.

Fixed, thanks.

> Your change:
> 
> -        if (!PageIndexTupleOverwrite(oldpage, oldoff, (Item) newtup, newsz))
> +        if (!PageIndexTupleOverwrite(oldpage, oldoff, (Item) unconstify(BrinTuple *, newtup), newsz))
> 
> Perhaps PageIndexTupleOverwrite's third argument should be const, since it
> only uses it as the const source of a memcpy.  (This is a bit harder than
> for md5_calc, above, since the third argument here is of type Item, which
> is itself a typedef to Pointer, and there exists no analogous ConstPointer
> or ConstItem definition in the sources.)

Yeah, typedefs to a pointer are a poor fit for this.  We have been
getting rid of them from time to time, but I don't know a general solution.

> Your change:
> 
> -            XLogRegisterBufData(0, (char *) newtup, newsz);
> +            XLogRegisterBufData(0, (char *) unconstify(BrinTuple *, newtup), newsz);
> 
> Perhaps the third argument to XLogRegisterBufData can be changed to const,
> with the extra work of changing XLogRecData's data field to const.  I'm not
> sure about the amount of code churn this would entail.

IIRC, the XLogRegister stuff is a web of lies with respect to constness.
 Resolving this properly is tricky.

> Your change:
> 
> -        result = pg_be_scram_exchange(scram_opaq, input, inputlen,
> +        result = pg_be_scram_exchange(scram_opaq, unconstify(char *, input), inputlen,
>                                        &output, &outputlen,
>                                        logdetail);
> 
> pg_be_scram_exchange passes the second argument into two functions,
> read_client_first_message and read_client_final_message, both of which take
> it as a non-const argument but immediately pstrdup it such that it might
> as well have been const.  Perhaps we should just clean up this mess rather
> than unconstifying.

Also fixed!

-- 
Peter Eisentraut              http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services


pgsql-hackers by date:

Previous
From: Andres Freund
Date:
Subject: Re: shared-memory based stats collector
Next
From: Andres Freund
Date:
Subject: Re: Log a sample of transactions