Do not sleep in FBSD's getevent()
authorBen Kaduk <kaduk@mit.edu>
Wed, 19 May 2010 05:44:44 +0000 (01:44 -0400)
committerDerrick Brashear <shadow@dementia.org>
Wed, 19 May 2010 10:39:35 +0000 (03:39 -0700)
Calling osi_AllocSmallSpace drops the glock, which allows
a race condition that caused a rather fast deadlock on
multiprocessor systems.
Use afs_osi_Alloc_NoSleep instead.

Change-Id: I9a328567a31fe0e4f77e7548fed31b7e4ff36f50
Reviewed-on: http://gerrit.openafs.org/1989
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>

src/afs/FBSD/osi_sleep.c

index 107a2b8..926e962 100644 (file)
@@ -114,7 +114,7 @@ afs_getevent(char *event)
        evp = evp->next;
     }
     if (!newp) {
-       newp = (afs_event_t *) osi_AllocSmallSpace(sizeof(afs_event_t));
+       newp = (afs_event_t *) afs_osi_Alloc_NoSleep(sizeof(afs_event_t));
        afs_evhashcnt++;
        newp->next = afs_evhasht[hashcode];
        afs_evhasht[hashcode] = newp;