From owner-cvs-src@FreeBSD.ORG Sun Nov 9 23:22:42 2003 Return-Path: Delivered-To: cvs-src@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id E156716A4CE; Sun, 9 Nov 2003 23:22:42 -0800 (PST) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 73BA643F3F; Sun, 9 Nov 2003 23:22:42 -0800 (PST) (envelope-from tjr@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.9/8.12.9) with ESMTP id hAA7MgXJ084958; Sun, 9 Nov 2003 23:22:42 -0800 (PST) (envelope-from tjr@repoman.freebsd.org) Received: (from tjr@localhost) by repoman.freebsd.org (8.12.9/8.12.9/Submit) id hAA7MgGe084957; Sun, 9 Nov 2003 23:22:42 -0800 (PST) (envelope-from tjr) Message-Id: <200311100722.hAA7MgGe084957@repoman.freebsd.org> From: "Tim J. Robbins" Date: Sun, 9 Nov 2003 23:22:41 -0800 (PST) To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org X-FreeBSD-CVS-Branch: HEAD Subject: cvs commit: src/sys/kern sysv_sem.c X-BeenThere: cvs-src@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Nov 2003 07:22:43 -0000 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