From 5b397701d2a090d063a02a82222161af008ffe00 Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Tue, 2 Apr 2002 03:11:41 +0000 Subject: [PATCH] STABLE12-linux-osi-alloc-up-alloc-sem-while-alloc-to-avoid-deadlock-against-glock-20020215 Based on report from David Howells of RedHat (via Guy Streeter) (cherry picked from commit f6525247abd62427a05806608a6b58999cfe1a1a) --- src/afs/LINUX/osi_alloc.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/afs/LINUX/osi_alloc.c b/src/afs/LINUX/osi_alloc.c index 46ebc4b54..154fce51f 100644 --- a/src/afs/LINUX/osi_alloc.c +++ b/src/afs/LINUX/osi_alloc.c @@ -290,7 +290,9 @@ void *osi_linux_alloc(unsigned int asize) allocator_init = 1; /* initialization complete */ } + up(&afs_linux_alloc_sem); new = linux_alloc(asize); /* get a chunk of memory of size asize */ + down(&afs_linux_alloc_sem); if (!new) { printf("afs_osi_Alloc: Can't vmalloc %d bytes.\n", asize); goto error; @@ -320,8 +322,11 @@ void *osi_linux_alloc(unsigned int asize) return MEMADDR(new); free_error: - if (new) - linux_free(new); + if (new) { + up(&afs_linux_alloc_sem); + linux_free(new); + down(&afs_linux_alloc_sem); + } new = NULL; goto error; -- 2.39.5