Date: Sun, 20 Sep 1998 01:18:00 +1000 (EST) From: Simon Coggins <simon@oz.org> To: current@FreeBSD.ORG Subject: free() isn't threads safe! Message-ID: <Pine.BSF.4.02.9809200113170.9082-100000@chaotic.oz.org>
next in thread | raw e-mail | index | archive | help
While trying to get a threads program working I noticed it was locking up
after it returned a free() error avout recursive call..
This is the code from lib/libc/stdlib/malloc.c
void
free(void *ptr)
{
malloc_func = " in free():"; <- isn't there a slim chance this can be
changed before the thread is locked?
THREAD_LOCK();
if (malloc_active++) {
wrtwarning("recursive call.\n");
malloc_active--;
return; <--------- Shouldn't the thread be unlocked before returning?
}
ifree(ptr);
UTRACE(ptr, 0, 0);
malloc_active--;
THREAD_UNLOCK();
return;
}
Wouldn't something like:
void
free(void *ptr)
{
THREAD_LOCK();
malloc_func = " in free():";
if (malloc_active++) {
wrtwarning("recursive call.\n");
malloc_active--;
THREAD_UNLOCK();
return;
}
ifree(ptr);
UTRACE(ptr, 0, 0);
malloc_active--;
THREAD_UNLOCK();
return;
}
Be more sensable?
Regards
Simon
---
+---------------------------------------------------------------+
| Email: chaos@ultra.net.au, chaos@oz.org, simon@bofh.com.au |
| http://www.ultra.net.au/~chaos Simon.Coggins@jcu.edu.au. |
| Chaos on IRC, IRC Operator for the OzORG Network |
+---------------------------------------------------------------+
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.02.9809200113170.9082-100000>
