On Thu, Jul 18, 2019 at 05:46:53PM +0100, Stuart Henderson wrote:

> Boost coroutine's basic_standard_stack_allocator is missing MAP_STACK,
> diff below adds it following the same method as the ones that otto@ has
> already done. The relevant file is not used as part of -md's build so
> I have only bumped REVISION-main.
> 
> This unbreaks icinga2's devel tree that will become icinga 2.11.0.
> 
> OK?

Looks good to me, 

        -Otto

> 
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/devel/boost/Makefile,v
> retrieving revision 1.87
> diff -u -p -r1.87 Makefile
> --- Makefile  12 Jul 2019 20:44:04 -0000      1.87
> +++ Makefile  18 Jul 2019 16:31:06 -0000
> @@ -9,11 +9,12 @@ VERSION=    1.66.0
>  DISTNAME=    boost_${VERSION:S/./_/g}
>  PKGNAME-main=        boost-${VERSION}
>  PKGNAME-md=  boost-md-${VERSION}
> -REVISION-main=       5
>  CATEGORIES=  devel
>  MASTER_SITES=        ${MASTER_SITE_SOURCEFORGE:=boost/}
>  EXTRACT_SUFX=        .tar.bz2
>  FIX_EXTRACT_PERMISSIONS =    Yes
> +
> +REVISION-main=       6
>  REVISION-md= 1
>  
>  SO_VERSION=  9.0
> Index: patches/patch-boost_coroutine_standard_stack_allocator_hpp
> ===================================================================
> RCS file: patches/patch-boost_coroutine_standard_stack_allocator_hpp
> diff -N patches/patch-boost_coroutine_standard_stack_allocator_hpp
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-boost_coroutine_standard_stack_allocator_hpp        18 Jul 
> 2019 16:31:06 -0000
> @@ -0,0 +1,34 @@
> +$OpenBSD$
> +
> +Index: boost/coroutine/standard_stack_allocator.hpp
> +--- boost/coroutine/standard_stack_allocator.hpp.orig
> ++++ boost/coroutine/standard_stack_allocator.hpp
> +@@ -26,6 +26,8 @@
> + #  include BOOST_ABI_PREFIX
> + #endif
> + 
> ++#include <sys/mman.h>
> ++
> + namespace boost {
> + namespace coroutines {
> + 
> +@@ -39,8 +41,8 @@ struct basic_standard_stack_allocator
> +         BOOST_ASSERT( traits_type::minimum_size() <= size);
> +         BOOST_ASSERT( traits_type::is_unbounded() || ( 
> traits_type::maximum_size() >= size) );
> + 
> +-        void * limit = std::malloc( size);
> +-        if ( ! limit) throw std::bad_alloc();
> ++        void * limit = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE 
> | MAP_ANON | MAP_STACK, -1, 0);
> ++        if ( limit == MAP_FAILED ) throw std::bad_alloc();
> + 
> +         ctx.size = size;
> +         ctx.sp = static_cast< char * >( limit) + ctx.size;
> +@@ -60,7 +62,7 @@ struct basic_standard_stack_allocator
> + #endif
> + 
> +         void * limit = static_cast< char * >( ctx.sp) - ctx.size;
> +-        std::free( limit);
> ++        munmap(limit, ctx.size);
> +     }
> + };
> + 
> 

Reply via email to