diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2010-12-14 05:16:18 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2010-12-14 05:16:18 +0000 |
commit | cac7efc966071ab8b1dc2faef70a698c45dfc895 (patch) | |
tree | 0663c9cf06648a1067ddd04373651e98c79fa524 | |
parent | 3a9ed12a583c79068fbd60f1314bed397f79d25f (diff) | |
download | gcc-cac7efc966071ab8b1dc2faef70a698c45dfc895.zip gcc-cac7efc966071ab8b1dc2faef70a698c45dfc895.tar.gz gcc-cac7efc966071ab8b1dc2faef70a698c45dfc895.tar.bz2 |
Release cache while holding thread lock.
Don't bother to hold thread lock while allocating cache.
From-SVN: r167784
-rw-r--r-- | libgo/runtime/go-go.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/libgo/runtime/go-go.c b/libgo/runtime/go-go.c index a97b7af..55aa3e3 100644 --- a/libgo/runtime/go-go.c +++ b/libgo/runtime/go-go.c @@ -107,11 +107,11 @@ remove_current_thread (void) if (list_entry->next != NULL) list_entry->next->prev = list_entry->prev; + runtime_MCache_ReleaseAll (mcache); + i = pthread_mutex_unlock (&__go_thread_ids_lock); __go_assert (i == 0); - runtime_MCache_ReleaseAll (mcache); - runtime_lock (&runtime_mheap); mstats.heap_alloc += mcache->local_alloc; mstats.heap_objects += mcache->local_objects; @@ -225,14 +225,13 @@ __go_go (void (*pfn) (void*), void *arg) newm->list_entry = list_entry; + newm->mcache = runtime_allocmcache (); + /* Add the thread to the list of all threads, marked as tentative since it is not yet ready to go. */ i = pthread_mutex_lock (&__go_thread_ids_lock); __go_assert (i == 0); - /* We use __go_thread_ids_lock as a lock for mheap.cachealloc. */ - newm->mcache = runtime_allocmcache (); - if (__go_all_thread_ids != NULL) __go_all_thread_ids->prev = list_entry; list_entry->next = __go_all_thread_ids; |