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.  (Andres Freund <andres@2ndquadrant.com>)
Список 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 по дате отправления:

Предыдущее
От: Heikki Linnakangas
Дата:
Сообщение: Re: Regarding WAL Format Changes
Следующее
От: "David E. Wheeler"
Дата:
Сообщение: Re: warning handling in Perl scripts