Fix paginator counter on x86-32

Atomic operations with 64 bit values must be aligned for 64-bit on x86-32.

According to the spec:

"The first word in a global variable or in an allocated struct or slice can be relied upon to be 64-bit aligned."

The above wasn't enough for the `paginationPageCount` on `SiteInfo`, maybe due to how `SiteInfo` is embedded.

This commit adds a 4 byte padding before the `uint64` that creates the correct alignment.

Fixes #2415
This commit is contained in:
Bjørn Erik Pedersen 2016-09-09 14:31:49 +02:00 committed by GitHub
parent eaf2f9bce5
commit 4df86a703a

View file

@ -155,7 +155,14 @@ type targetList struct {
type SiteInfo struct {
// atomic requires 64-bit alignment for struct field access
paginationPageCount uint64
// According to the docs, " The first word in a global variable or in an
// allocated struct or slice can be relied upon to be 64-bit aligned."
// Moving paginationPageCount to the top of this struct didn't do the
// magic, maybe due to the way SiteInfo is embedded.
// Adding the 4 byte padding below does the trick.
_ [4]byte
paginationPageCount uint64
BaseURL template.URL
Taxonomies TaxonomyList
Authors AuthorList