Andres Freund <and...@anarazel.de> writes: > On 2017-08-16 13:40:09 -0400, Tom Lane wrote: >> I was wondering why the shm_toc code was using BUFFERALIGN and not >> MAXALIGN, and I now suspect that the answer is "it's an entirely >> undocumented kluge to make the atomics code not crash on 32-bit >> machines, so long as nobody puts a pg_atomic_uint64 anywhere except in >> a shm_toc".
> I don't think there were any atomics in affected code until earlier > today... And given it didn't work for shm_toc anyway, I'm not quite > following. Right, Robert pointed out that it's pre-existing code. My point should be read as "it's just blind luck that shm_toc is using bigger than MAXALIGN alignment, or this would never work on 32-bit machines". >> I'm not sure that that's good enough, and I'm damn sure that it >> shouldn't be undocumented. > 8 byte alignment would be good enough, so BUFFERALIGN ought to be > sufficient. But it'd be nicer to have a separate more descriptive knob. What I meant by possibly not good enough is that pg_atomic_uint64 used in other places isn't going to be very safe. We might be effectively all right as long as we have a coding rule that pg_atomic_uint64 can only be placed in memory handed out by ShmemAlloc or shm_toc_allocate, which both have bigger-than-MAXALIGN alignment practices. But this needs to be documented. regards, tom lane -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers