Index: linux/arch/i386/kernel/semaphore.c =================================================================== RCS file: /home/kernel/cvs_master/linux/arch/i386/kernel/semaphore.c,v retrieving revision 1.3 diff -u -r1.3 semaphore.c --- linux/arch/i386/kernel/semaphore.c 2000/11/16 19:58:26 1.3 +++ linux/arch/i386/kernel/semaphore.c 2000/11/17 23:12:48 @@ -64,6 +64,14 @@ spin_lock_irq(&semaphore_lock); sem->sleepers++; + + /* + * Are there other people waiting for this? + * They get to go first. + */ + if (sem->sleepers > 1) + goto inside; + for (;;) { int sleepers = sem->sleepers; @@ -76,6 +84,7 @@ break; } sem->sleepers = 1; /* us - see -1 above */ +inside: spin_unlock_irq(&semaphore_lock); schedule();