kern/131597: [kernel] c++ exceptions very slow on FreeBSD 7.1/amd64

John Baldwin jhb at
Fri Apr 23 17:16:11 UTC 2010

The following reply was made to PR kern/131597; it has been noted by GNATS.

From: John Baldwin <jhb at>
To: Kostik Belousov <kostikbel at>
Cc: bug-followup at,
 guillaume at,
 kan at,
 davidxu at
Subject: Re: kern/131597: [kernel] c++ exceptions very slow on FreeBSD 7.1/amd64
Date: Fri, 23 Apr 2010 08:43:41 -0400

 On Friday 23 April 2010 8:25:01 am Kostik Belousov wrote:
 > On Thu, Apr 22, 2010 at 04:09:34PM -0400, John Baldwin wrote:
 > > I tracked the sigprocmask() system calls down to the operations to
 > > acquire a write lock in the runtime linker. The lock was added to fix
 > > an earlier bug with throwing exceptions in multithreaded C++ apps. The
 > > relevant commit that added the lock is this:
 > >
 > >
 > >
 > > Are exceptions permitted during a signal handler? If not, then in
 > > theory we would not need to invoke sigprocmask() for this particular
 > > lock perhaps? I'm not sure how easy that would be to achieve given the
 > > hooks to allow the thread library to overload the locking routines.
 > > Also, this doesn't explain the lack of sigprocmask() calls under i386.
 > > FreeBSD/i386 should be using the same locking code and thus invoking
 > > sigprocmask() for each exception as well.
 > Throwing an exception during asyncronous signal execution rises undefined
 > behaviour, AFAIK. sigprocmask() is there to support libc_r, and cannot
 > be removed as far as we need to provide FreeBSD 4.x compatibility.
 Hmmm.  Why does libthr use sigprocmask() for its rtld locks then?  Is that 
 just a copy-paste from libc_r that can be removed now?
 John Baldwin

More information about the freebsd-bugs mailing list