The following reply was made to PR kern/131597; it has been noted by GNATS.
From: John Baldwin <[email protected]> To: Kostik Belousov <[email protected]> Cc: [email protected], [email protected], [email protected], [email protected] 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: > > > > http://svn.freebsd.org/viewvc/base?view=revision&revision=178807 > > > > 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 _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-bugs To unsubscribe, send any mail to "[email protected]"
