Re: Is this non-volatile pointer access OK?
| От | Peter Eisentraut |
|---|---|
| Тема | Re: Is this non-volatile pointer access OK? |
| Дата | |
| Msg-id | 1346721671.30124.7.camel@vanquo.pezone.net обсуждение |
| Ответ на | Re: Is this non-volatile pointer access OK? (Peter Geoghegan <peter@2ndquadrant.com>) |
| Список | pgsql-hackers |
On Mon, 2012-09-03 at 11:14 +0100, Peter Geoghegan wrote:
> Come to think of it, the whole convention of using a lower-case
> variant of the original pointer variable name seems like a foot-gun,
> given the harmful and indeed very subtle consequences of making this
> error.
With some inventive macro magic, you could probably make this safer.
I'm thinking something along the lines of replacing
SpinLockAcquire(&xlogctl->info_lck);
with
SpinLockAcquire(XLogCtl, info_lck);
which expands to
{ volatile typeof(XLogCtl) *XLogCtl_volatile = XLogCtl; void *XLogCtl = NULL; // compiler error or crash at run
timeif used OldSpinLockAcquire(XLogCtl_volatile->info_lock); ...
and then something corresponding for SpinLockRelease.
This will likely only work with modern compilers, but it could give you
some amount of static checking against this problem.
В списке pgsql-hackers по дате отправления: