linux-osi-alloc-up-alloc-sem-while-alloc-to-avoid-deadlock-against-glock-20020215
authorDerrick Brashear <shadow@dementia.org>
Fri, 15 Feb 2002 14:00:39 +0000 (14:00 +0000)
committerDerrick Brashear <shadow@dementia.org>
Fri, 15 Feb 2002 14:00:39 +0000 (14:00 +0000)
Based on report from David Howells of RedHat (via Guy Streeter)

src/afs/LINUX/osi_alloc.c

index 46ebc4b..154fce5 100644 (file)
@@ -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;