head 1.1; access; symbols pkgsrc-2026Q1:1.1.0.114 pkgsrc-2026Q1-base:1.1 pkgsrc-2025Q4:1.1.0.112 pkgsrc-2025Q4-base:1.1 pkgsrc-2025Q3:1.1.0.110 pkgsrc-2025Q3-base:1.1 pkgsrc-2025Q2:1.1.0.108 pkgsrc-2025Q2-base:1.1 pkgsrc-2025Q1:1.1.0.106 pkgsrc-2025Q1-base:1.1 pkgsrc-2024Q4:1.1.0.104 pkgsrc-2024Q4-base:1.1 pkgsrc-2024Q3:1.1.0.102 pkgsrc-2024Q3-base:1.1 pkgsrc-2024Q2:1.1.0.100 pkgsrc-2024Q2-base:1.1 pkgsrc-2024Q1:1.1.0.98 pkgsrc-2024Q1-base:1.1 pkgsrc-2023Q4:1.1.0.96 pkgsrc-2023Q4-base:1.1 pkgsrc-2023Q3:1.1.0.94 pkgsrc-2023Q3-base:1.1 pkgsrc-2023Q2:1.1.0.92 pkgsrc-2023Q2-base:1.1 pkgsrc-2023Q1:1.1.0.90 pkgsrc-2023Q1-base:1.1 pkgsrc-2022Q4:1.1.0.88 pkgsrc-2022Q4-base:1.1 pkgsrc-2022Q3:1.1.0.86 pkgsrc-2022Q3-base:1.1 pkgsrc-2022Q2:1.1.0.84 pkgsrc-2022Q2-base:1.1 pkgsrc-2022Q1:1.1.0.82 pkgsrc-2022Q1-base:1.1 pkgsrc-2021Q4:1.1.0.80 pkgsrc-2021Q4-base:1.1 pkgsrc-2021Q3:1.1.0.78 pkgsrc-2021Q3-base:1.1 pkgsrc-2021Q2:1.1.0.76 pkgsrc-2021Q2-base:1.1 pkgsrc-2021Q1:1.1.0.74 pkgsrc-2021Q1-base:1.1 pkgsrc-2020Q4:1.1.0.72 pkgsrc-2020Q4-base:1.1 pkgsrc-2020Q3:1.1.0.70 pkgsrc-2020Q3-base:1.1 pkgsrc-2020Q2:1.1.0.66 pkgsrc-2020Q2-base:1.1 pkgsrc-2020Q1:1.1.0.46 pkgsrc-2020Q1-base:1.1 pkgsrc-2019Q4:1.1.0.68 pkgsrc-2019Q4-base:1.1 pkgsrc-2019Q3:1.1.0.64 pkgsrc-2019Q3-base:1.1 pkgsrc-2019Q2:1.1.0.62 pkgsrc-2019Q2-base:1.1 pkgsrc-2019Q1:1.1.0.60 pkgsrc-2019Q1-base:1.1 pkgsrc-2018Q4:1.1.0.58 pkgsrc-2018Q4-base:1.1 pkgsrc-2018Q3:1.1.0.56 pkgsrc-2018Q3-base:1.1 pkgsrc-2018Q2:1.1.0.54 pkgsrc-2018Q2-base:1.1 pkgsrc-2018Q1:1.1.0.52 pkgsrc-2018Q1-base:1.1 pkgsrc-2017Q4:1.1.0.50 pkgsrc-2017Q4-base:1.1 pkgsrc-2017Q3:1.1.0.48 pkgsrc-2017Q3-base:1.1 pkgsrc-2017Q2:1.1.0.44 pkgsrc-2017Q2-base:1.1 pkgsrc-2017Q1:1.1.0.42 pkgsrc-2017Q1-base:1.1 pkgsrc-2016Q4:1.1.0.40 pkgsrc-2016Q4-base:1.1 pkgsrc-2016Q3:1.1.0.38 pkgsrc-2016Q3-base:1.1 pkgsrc-2016Q2:1.1.0.36 pkgsrc-2016Q2-base:1.1 pkgsrc-2016Q1:1.1.0.34 pkgsrc-2016Q1-base:1.1 pkgsrc-2015Q4:1.1.0.32 pkgsrc-2015Q4-base:1.1 pkgsrc-2015Q3:1.1.0.30 pkgsrc-2015Q3-base:1.1 pkgsrc-2015Q2:1.1.0.28 pkgsrc-2015Q2-base:1.1 pkgsrc-2015Q1:1.1.0.26 pkgsrc-2015Q1-base:1.1 pkgsrc-2014Q4:1.1.0.24 pkgsrc-2014Q4-base:1.1 pkgsrc-2014Q3:1.1.0.22 pkgsrc-2014Q3-base:1.1 pkgsrc-2014Q2:1.1.0.20 pkgsrc-2014Q2-base:1.1 pkgsrc-2014Q1:1.1.0.18 pkgsrc-2014Q1-base:1.1 pkgsrc-2013Q4:1.1.0.16 pkgsrc-2013Q4-base:1.1 pkgsrc-2013Q3:1.1.0.14 pkgsrc-2013Q3-base:1.1 pkgsrc-2013Q2:1.1.0.12 pkgsrc-2013Q2-base:1.1 pkgsrc-2013Q1:1.1.0.10 pkgsrc-2013Q1-base:1.1 pkgsrc-2012Q4:1.1.0.8 pkgsrc-2012Q4-base:1.1 pkgsrc-2012Q3:1.1.0.6 pkgsrc-2012Q3-base:1.1 pkgsrc-2012Q2:1.1.0.4 pkgsrc-2012Q2-base:1.1 pkgsrc-2012Q1:1.1.0.2; locks; strict; comment @# @; 1.1 date 2012.06.16.07.46.55; author dholland; state Exp; branches 1.1.2.1; next ; 1.1.2.1 date 2012.06.16.07.46.55; author tron; state dead; branches; next 1.1.2.2; 1.1.2.2 date 2012.06.18.22.18.35; author tron; state Exp; branches; next ; desc @@ 1.1 log @Add gcc memory barriers after the manner of emacs20's patch-bm, for the same reason: gcc "knows" that malloc has no side effects and reorders code around it, only it's wrong. Fixes SIGSEGV during build seen in some environments. Bump package revision as a precaution, because I don't understand why this sometimes doesn't fail and sometimes does with the same gcc version. @ text @$NetBSD$ Add memory barriers for gcc around recursive calls to malloc and free with "internalUse" set to 1. gcc fervently believes that malloc and free do not interact with anything else, and so it freely reorders code around calls to malloc. This causes internalUse to not be set to 1 during the recursive call, which results in an infinite recursion. Compare patch-bm in editors/emacs20. --- efence.c~ 2002-02-19 22:10:46.000000000 +0000 +++ efence.c @@@@ -377,7 +377,16 @@@@ allocateMoreSlots(void) noAllocationListProtection = 1; internalUse = 1; +#ifdef __GNUC__ + __asm __volatile("":::"memory"); +#endif + newAllocation = malloc(newSize); + +#ifdef __GNUC__ + __asm __volatile("":::"memory"); +#endif + memcpy(newAllocation, allocationList, allocationListSize); memset(&(((char *)newAllocation)[allocationListSize]), 0, bytesPerPage); @@@@ -386,8 +395,16 @@@@ allocateMoreSlots(void) slotCount += slotsPerPage; unUsedSlots += slotsPerPage; +#ifdef __GNUC__ + __asm __volatile("":::"memory"); +#endif + free(oldAllocation); +#ifdef __GNUC__ + __asm __volatile("":::"memory"); +#endif + /* * Keep access to the allocation list open at this point, because * I am returning to memalign(), which needs that access. @ 1.1.2.1 log @file patch-efence_c was added on branch pkgsrc-2012Q1 on 2012-06-18 22:18:35 +0000 @ text @d1 46 @ 1.1.2.2 log @Pullup ticket #3835 - requested by dholland devel/electric-fence: build fix Revisions pulled up: - devel/electric-fence/Makefile 1.4 - devel/electric-fence/distinfo 1.2 - devel/electric-fence/patches/patch-efence_c 1.1 --- Module Name: pkgsrc Committed By: dholland Date: Sat Jun 16 07:46:55 UTC 2012 Modified Files: pkgsrc/devel/electric-fence: Makefile distinfo Added Files: pkgsrc/devel/electric-fence/patches: patch-efence_c Log Message: Add gcc memory barriers after the manner of emacs20's patch-bm, for the same reason: gcc "knows" that malloc has no side effects and reorders code around it, only it's wrong. Fixes SIGSEGV during build seen in some environments. Bump package revision as a precaution, because I don't understand why this sometimes doesn't fail and sometimes does with the same gcc version. @ text @a0 46 $NetBSD$ Add memory barriers for gcc around recursive calls to malloc and free with "internalUse" set to 1. gcc fervently believes that malloc and free do not interact with anything else, and so it freely reorders code around calls to malloc. This causes internalUse to not be set to 1 during the recursive call, which results in an infinite recursion. Compare patch-bm in editors/emacs20. --- efence.c~ 2002-02-19 22:10:46.000000000 +0000 +++ efence.c @@@@ -377,7 +377,16 @@@@ allocateMoreSlots(void) noAllocationListProtection = 1; internalUse = 1; +#ifdef __GNUC__ + __asm __volatile("":::"memory"); +#endif + newAllocation = malloc(newSize); + +#ifdef __GNUC__ + __asm __volatile("":::"memory"); +#endif + memcpy(newAllocation, allocationList, allocationListSize); memset(&(((char *)newAllocation)[allocationListSize]), 0, bytesPerPage); @@@@ -386,8 +395,16 @@@@ allocateMoreSlots(void) slotCount += slotsPerPage; unUsedSlots += slotsPerPage; +#ifdef __GNUC__ + __asm __volatile("":::"memory"); +#endif + free(oldAllocation); +#ifdef __GNUC__ + __asm __volatile("":::"memory"); +#endif + /* * Keep access to the allocation list open at this point, because * I am returning to memalign(), which needs that access. @