From 4df86a703a56b3c6a75bbba20d581e7422858e09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Fri, 9 Sep 2016 14:31:49 +0200 Subject: [PATCH] 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 --- hugolib/site.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/hugolib/site.go b/hugolib/site.go index 8ffe0fad4..3e537c93d 100644 --- a/hugolib/site.go +++ b/hugolib/site.go @@ -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