diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2017-09-27 06:47:07 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2017-09-27 06:57:33 +0000 |
commit | 4a121590963d841e0f1bf3590d8ec2727b339345 (patch) | |
tree | 2d499c1f3798aa2dc51b84a65d49995568960625 /main/guile | |
parent | 7d973a1e2165edf7318ef287a836a2f6b6baae2a (diff) | |
download | aports-4a121590963d841e0f1bf3590d8ec2727b339345.tar.bz2 aports-4a121590963d841e0f1bf3590d8ec2727b339345.tar.xz |
main/guile: fix bootstrap failure
the garbage collector uses recursive functions while bootstrapping the
build and runs out of stack space. Fix it by explicitly set thread stack
size when creating the thread.
fixes #7919
Diffstat (limited to 'main/guile')
-rw-r--r-- | main/guile/APKBUILD | 9 | ||||
-rw-r--r-- | main/guile/stacksize.patch | 28 |
2 files changed, 34 insertions, 3 deletions
diff --git a/main/guile/APKBUILD b/main/guile/APKBUILD index 228af42e61..c07b32a1a2 100644 --- a/main/guile/APKBUILD +++ b/main/guile/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Natanael Copa <ncopa@alpinelinux.org> pkgname=guile pkgver=2.2.2 -pkgrel=0 +pkgrel=1 pkgdesc="Guile is a portable, embeddable Scheme implementation written in C" url="http://www.gnu.org/software/guile/" arch="all" @@ -13,6 +13,7 @@ depends= depends_dev="guile gc-dev" source="ftp://ftp.gnu.org/pub/gnu/$pkgname/$pkgname-$pkgver.tar.gz 0002-Mark-mutex-with-owner-not-retained-threads-test-as-u.patch + stacksize.patch " builddir="$srcdir"/$pkgname-$pkgver @@ -24,7 +25,8 @@ build() { --host=$CHOST \ --prefix=/usr \ --disable-error-on-warning \ - --disable-static + --disable-static \ + --with-threads make } @@ -35,4 +37,5 @@ package() { } sha512sums="dfc4a413faa8d7cd111beb3673e52be3d95c5c408c6796c874cdd01c095a05bc266856c45067aef3b931889349980d0985dde269aabde18f21659d02f5c2344d guile-2.2.2.tar.gz -54a9fe0fa2ea83da7ae61f96612e3e653ec80f60ab41d1995dc44bd05c7ff68cc4fab36a655e8835c4ab1cf0966765a299ef2d73cb9f69d3ef955e6aeaa8062d 0002-Mark-mutex-with-owner-not-retained-threads-test-as-u.patch" +54a9fe0fa2ea83da7ae61f96612e3e653ec80f60ab41d1995dc44bd05c7ff68cc4fab36a655e8835c4ab1cf0966765a299ef2d73cb9f69d3ef955e6aeaa8062d 0002-Mark-mutex-with-owner-not-retained-threads-test-as-u.patch +d9a1631abe91bfafd772667d2870d80557a3f6e3886d7ec101354633995b405a4452c329dfd1958c9d5e97bc6af32d5f7885ab0ef869edf2e6b9fec142c5ecfa stacksize.patch" diff --git a/main/guile/stacksize.patch b/main/guile/stacksize.patch new file mode 100644 index 0000000000..f89f970b16 --- /dev/null +++ b/main/guile/stacksize.patch @@ -0,0 +1,28 @@ +diff --git a/libguile/finalizers.c b/libguile/finalizers.c +index c5d69e8..f8d78d8 100644 +--- a/libguile/finalizers.c ++++ b/libguile/finalizers.c +@@ -246,11 +246,19 @@ start_finalization_thread (void) + to block on any lock that scm_spawn_thread might want to take, + and we don't want to inherit the dynamic state (fluids) of the + caller. */ +- if (pthread_create (&finalization_thread, NULL, +- run_finalization_thread, NULL)) +- perror ("error creating finalization thread"); ++ pthread_attr_t attr; ++ if (pthread_attr_init(&attr)) ++ perror ("pthread_attr_init"); + else +- finalization_thread_is_running = 1; ++ { ++ if (pthread_attr_setstacksize(&attr, 256 * 1024) == 0 && ++ pthread_create (&finalization_thread, &attr, ++ run_finalization_thread, NULL) == 0) ++ finalization_thread_is_running = 1; ++ else ++ perror ("error creating finalization thread"); ++ pthread_attr_destroy(&attr); ++ } + } + scm_i_pthread_mutex_unlock (&finalization_thread_lock); + } |