...so that cygheap can be locked/unlocked from outside of mm/cygheap.cc.
Reviewed-by: Corinna Vinschen <[email protected]>
Signed-off-by: Takashi Yano <[email protected]>
---
winsup/cygwin/local_includes/cygheap.h | 2 ++
winsup/cygwin/mm/cygheap.cc | 22 +++++++++++++++++-----
2 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/winsup/cygwin/local_includes/cygheap.h
b/winsup/cygwin/local_includes/cygheap.h
index fed87ec2b..aa928bc55 100644
--- a/winsup/cygwin/local_includes/cygheap.h
+++ b/winsup/cygwin/local_includes/cygheap.h
@@ -541,6 +541,8 @@ struct init_cygheap: public mini_cygheap
threadlist_t *find_tls (int, bool&);
sigset_t compute_sigblkmask ();
void unlock_tls (threadlist_t *t) { if (t) ReleaseMutex (t->mutex); }
+ void lock ();
+ void unlock ();
};
diff --git a/winsup/cygwin/mm/cygheap.cc b/winsup/cygwin/mm/cygheap.cc
index 338886468..2ed21e6ce 100644
--- a/winsup/cygwin/mm/cygheap.cc
+++ b/winsup/cygwin/mm/cygheap.cc
@@ -262,6 +262,18 @@ init_cygheap::init_installation_root ()
}
}
+void
+init_cygheap::lock ()
+{
+ AcquireSRWLockExclusive (&cygheap_protect);
+}
+
+void
+init_cygheap::unlock ()
+{
+ ReleaseSRWLockExclusive (&cygheap_protect);
+}
+
/* Initialize bucket_val. The value is the max size of a block
fitting into the bucket. The values are powers of two and their
medians: 32, 48, 64, 96, ...
@@ -367,7 +379,7 @@ _cmalloc (unsigned size)
if (b >= NBUCKETS)
return NULL;
- AcquireSRWLockExclusive (&cygheap_protect);
+ cygheap->lock ();
if (cygheap->buckets[b])
{
rvc = (_cmalloc_entry *) cygheap->buckets[b];
@@ -379,7 +391,7 @@ _cmalloc (unsigned size)
rvc = (_cmalloc_entry *) _csbrk (bucket_val[b] + sizeof
(_cmalloc_entry));
if (!rvc)
{
- ReleaseSRWLockExclusive (&cygheap_protect);
+ cygheap->unlock ();
return NULL;
}
@@ -387,19 +399,19 @@ _cmalloc (unsigned size)
rvc->prev = cygheap->chain;
cygheap->chain = rvc;
}
- ReleaseSRWLockExclusive (&cygheap_protect);
+ cygheap->unlock ();
return rvc->data;
}
static void
_cfree (void *ptr)
{
- AcquireSRWLockExclusive (&cygheap_protect);
+ cygheap->lock ();
_cmalloc_entry *rvc = to_cmalloc (ptr);
unsigned b = rvc->b;
rvc->ptr = cygheap->buckets[b];
cygheap->buckets[b] = (char *) rvc;
- ReleaseSRWLockExclusive (&cygheap_protect);
+ cygheap->unlock ();
}
static void *
--
2.45.1