mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-20 15:43:16 +00:00
Delete the XXX comments that refer to spinlock recursion. The malloc/free/
realloc functions check for recursion within the malloc code itself. In a thread-safe library, the single spinlock ensures that no two threads go inside the protected code at the same time. The thread implementation is responsible for ensuring that the spinlock does in fact protect malloc. There was a window of opportunity in which this was not the case. I'll fix that with a commit RSN.
This commit is contained in:
parent
013a898f40
commit
a0aa389007
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=39802
@ -6,7 +6,7 @@
|
||||
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
|
||||
* ----------------------------------------------------------------------------
|
||||
*
|
||||
* $Id: malloc.c,v 1.41 1998/09/20 01:07:50 alex Exp $
|
||||
* $Id: malloc.c,v 1.42 1998/09/23 21:26:04 dfr Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -1068,7 +1068,6 @@ malloc(size_t size)
|
||||
if (malloc_active++) {
|
||||
wrtwarning("recursive call.\n");
|
||||
malloc_active--;
|
||||
/*THREAD_UNLOCK();*/ /* XXX */
|
||||
return (0);
|
||||
}
|
||||
if (!malloc_started)
|
||||
@ -1092,18 +1091,6 @@ free(void *ptr)
|
||||
malloc_func = " in free():";
|
||||
if (malloc_active++) {
|
||||
wrtwarning("recursive call.\n");
|
||||
/*
|
||||
* XXX
|
||||
* Ideally the next two lines would be gone and free() would
|
||||
* exit below. Unfortunately our spinlock implementation
|
||||
* allows a particular thread to obtain a lock multiple times
|
||||
* without counting how many times said operation has been
|
||||
* performed. The practical upshot of which is a single unlock
|
||||
* causes all locks to be undone at once. For this reason,
|
||||
* we return without performing an unlock in the case of
|
||||
* recursion (see also the commented out THREAD_UNLOCK calls
|
||||
* in malloc & realloc).
|
||||
*/
|
||||
malloc_active--;
|
||||
return;
|
||||
} else {
|
||||
@ -1125,7 +1112,6 @@ realloc(void *ptr, size_t size)
|
||||
if (malloc_active++) {
|
||||
wrtwarning("recursive call.\n");
|
||||
malloc_active--;
|
||||
/*THREAD_UNLOCK();*/ /* XXX */
|
||||
return (0);
|
||||
}
|
||||
if (ptr && !malloc_started) {
|
||||
|
Loading…
Reference in New Issue
Block a user