On Thu, Jun 2, 2016 at 6:04 PM, Andres Freund <and...@anarazel.de> wrote: > Greg, are you writing & testing a patch? Or should I write something for > you to test?
I'm running the regression tests now. They look like they're passing. I just threw maxalign everywhere but I was going to comment that we might need to put a double in for the subsequent struct elements to end up aligned as well. But I guess that's not true due to the u64 element. I'm not sure I've completely grokked all the bits and pieces here so I may have added a few too many maxaligns. I put them on all the size and offset calculations before the multiplications. -- greg
diff --git a/src/backend/storage/ipc/latch.c b/src/backend/storage/ipc/latch.c index 3fbe0e5..5e69a5a 100644 --- a/src/backend/storage/ipc/latch.c +++ b/src/backend/storage/ipc/latch.c @@ -485,35 +485,35 @@ CreateWaitEventSet(MemoryContext context, int nevents) char *data; Size sz = 0; - sz += sizeof(WaitEventSet); - sz += sizeof(WaitEvent) * nevents; + sz += MAXALIGN(sizeof(WaitEventSet)); + sz += MAXALIGN(sizeof(WaitEvent)) * nevents; #if defined(WAIT_USE_EPOLL) - sz += sizeof(struct epoll_event) * nevents; + sz += MAXALIGN(sizeof(struct epoll_event)) * nevents; #elif defined(WAIT_USE_POLL) - sz += sizeof(struct pollfd) * nevents; + sz += MAXALIGN(sizeof(struct pollfd)) * nevents; #elif defined(WAIT_USE_WIN32) /* need space for the pgwin32_signal_event */ - sz += sizeof(HANDLE) * (nevents + 1); + sz += MAXALIGN(sizeof(HANDLE)) * (nevents + 1); #endif data = (char *) MemoryContextAllocZero(context, sz); set = (WaitEventSet *) data; - data += sizeof(WaitEventSet); + data += MAXALIGN(sizeof(WaitEventSet)); set->events = (WaitEvent *) data; - data += sizeof(WaitEvent) * nevents; + data += MAXALIGN(sizeof(WaitEvent)) * nevents; #if defined(WAIT_USE_EPOLL) set->epoll_ret_events = (struct epoll_event *) data; - data += sizeof(struct epoll_event) * nevents; + data += MAXALIGN(sizeof(struct epoll_event)) * nevents; #elif defined(WAIT_USE_POLL) set->pollfds = (struct pollfd *) data; - data += sizeof(struct pollfd) * nevents; + data += MAXALIGN(sizeof(struct pollfd)) * nevents; #elif defined(WAIT_USE_WIN32) set->handles = (HANDLE) data; - data += sizeof(HANDLE) * nevents; + data += MAXALIGN(sizeof(HANDLE)) * nevents; #endif set->latch = NULL;
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers