cvs commit: src/sys/kern sysv_sem.c
Tim J. Robbins
tjr at FreeBSD.org
Sun Nov 9 23:22:43 PST 2003
tjr 2003/11/09 23:22:41 PST
FreeBSD src repository
Modified files:
sys/kern sysv_sem.c
Log:
When there are no free sem_undo structs available in semu_alloc(), only
free one sem_undo with un_cnt == 0 instead of all of them. This is a
temporary workaround until the SLIST_FOREACH_PREVPTR loop gets fixed so
that it doesn't cause cycles in semu_list when removing multiple adjacent
items. It might be easier to just use (doubly-linked) LISTs here instead
of complicated SLIST code to achieve O(1) removals.
This bug manifested itself as a complete lockup under heavy semaphore use
by multiple processes with the SEM_UNDO flag set.
PR: 58984
Revision Changes Path
1.66 +4 -3 src/sys/kern/sysv_sem.c
More information about the cvs-src
mailing list