From: | Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com> |
---|---|
To: | Mark Dilger <hornschnorter(at)gmail(dot)com> |
Cc: | pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Subject: | Re: more unconstify use |
Date: | 2019-02-14 20:07:45 |
Message-ID: | a87f0cb6-8864-485d-4c89-f534bed9c447@2ndquadrant.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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
From | Date | Subject | |
---|---|---|---|
Next Message | Andres Freund | 2019-02-14 20:14:04 | Re: Log a sample of transactions |
Previous Message | Andres Freund | 2019-02-14 20:01:48 | Re: shared-memory based stats collector |