Re: [COMMITTERS] pgsql: Move WAL continuation record information to WAL page header.
От | Heikki Linnakangas |
---|---|
Тема | Re: [COMMITTERS] pgsql: Move WAL continuation record information to WAL page header. |
Дата | |
Msg-id | 4FEB223A.3060707@enterprisedb.com обсуждение исходный текст |
Ответы |
Re: [COMMITTERS] pgsql: Move WAL continuation record information to WAL page header.
|
Список | pgsql-hackers |
On 27.06.2012 17:53, Andres Freund wrote: > I had noticed one thing when reviewing the patches before: > > @@ -717,6 +719,15 @@ XLogInsert(RmgrId rmid, uint8 info, XLogRecData *rdata) > bool doPageWrites; > bool isLogSwitch = (rmid == RM_XLOG_ID&& info == XLOG_SWITCH); > uint8 info_orig = info; > + static XLogRecord *rechdr; > + > + if (rechdr == NULL) > + { > + rechdr = malloc(SizeOfXLogRecord); > + if (rechdr == NULL) > + elog(ERROR, "out of memory"); > + MemSet(rechdr, 0, SizeOfXLogRecord); > + } > > /* cross-check on whether we should be here or not */ > if (!XLogInsertAllowed()) > > Why do you allocate this dynamically? XLogRecord is 32bytes, there doesn't > seem to be much point in this? On 64-bit architectures, the struct needs padding at the end to make the size MAXALIGNed to 32 bytes; a simple "XLogRecord rechdr" local variable would not include that. You could do something like: union { XLogRecord rechdr; char bytes[SizeOfXLogRecord]; } but that's quite ugly too. -- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com
В списке pgsql-hackers по дате отправления: