From: Ian Lance Taylor Date: Wed, 9 Mar 2011 06:31:37 +0000 (+0000) Subject: re PR go/48019 (Need to handle EINTR in libgo testsuite) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7b5e671326b7516d1ca13cb64050ffda279e66ea;p=gcc.git re PR go/48019 (Need to handle EINTR in libgo testsuite) PR go/48019 Ignore EINTR in runtime_lock_full. From-SVN: r170810 --- diff --git a/libgo/runtime/thread.c b/libgo/runtime/thread.c index b600754f64c..bac3f7dfdc1 100644 --- a/libgo/runtime/thread.c +++ b/libgo/runtime/thread.c @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +#include #include "runtime.h" #include "go-assert.h" @@ -32,8 +33,12 @@ static void runtime_lock_full(Lock *l) __attribute__ ((noinline)); static void runtime_lock_full(Lock *l) { - if(sem_wait(&l->sem) != 0) - runtime_throw("sem_wait failed"); + for(;;){ + if(sem_wait(&l->sem) == 0) + return; + if(errno != EINTR) + runtime_throw("sem_wait failed"); + } } void