| From | Sent On | Attachments |
|---|---|---|
| Andriy Tkachuk | Mar 2, 2005 2:56 pm | |
| Daniel Eischen | Mar 2, 2005 3:47 pm | |
| Andriy Tkachuk | Mar 3, 2005 6:35 am | |
| Daniel Eischen | Mar 3, 2005 6:46 am | |
| David Xu | Mar 3, 2005 6:48 am | |
| Andriy Tkachuk | Mar 3, 2005 6:58 am | .patch |
| Andriy Tkachuk | Mar 3, 2005 7:29 am | .cc |
| Andriy Tkachuk | Mar 3, 2005 8:07 am | |
| Andriy Tkachuk | Mar 3, 2005 8:10 am | |
| Andriy Tkachuk | Mar 3, 2005 8:15 am | |
| David Xu | Mar 3, 2005 8:15 am | |
| Andriy Tkachuk | Mar 3, 2005 8:44 am | |
| Andriy Tkachuk | Mar 3, 2005 9:26 am | .patch2 |
| David Xu | Mar 3, 2005 10:46 am | |
| Daniel Eischen | Mar 3, 2005 3:14 pm | |
| Julian Elischer | Mar 3, 2005 8:29 pm | |
| David Xu | Mar 4, 2005 3:24 am | |
| Andriy Tkachuk | Mar 4, 2005 5:57 am |
| Subject: | patch for threads/76690 - critical - fork hang in child for-lc_r | |
|---|---|---|
| From: | Daniel Eischen (deis...@freebsd.org) | |
| Date: | Mar 3, 2005 3:14:02 pm | |
| List: | org.freebsd.freebsd-threads | |
On Thu, 3 Mar 2005, Andriy Tkachuk wrote:
Hmm, libc_r and libpthread handle spinlock differently which malloc uses to protect itself, some real world benchmarks are better than
this.
yes , you right, David. one have to check __isthreaded before firing _SPINLOCK. there will be nothing wrong, because
static spinlock_t thread_lock = _SPINLOCK_INITIALIZER;
initialyzed regardless __isthreaded in malloc.c but for optimization probably it is worth to add this check. Take a look on updated patch.
btw: i don't see the unlock in child in libpthread. there must be two unlocks
I told you in previous mail, _kse_single_thread() calls _thr_spinlock_init(). The malloc lock is not the only lock used in libc, so the safe way to make sure libc is in a clean state after a fork is to reinitialize all the locks used by libc, not just the malloc lock. libc really shouldn't try to use any locks unless __isthreaded is true, so after a fork() it shouldn't really matter what state the locks are in.
-- DE






.patch