From owner-freebsd-current Tue Jul 2 9:22:36 2002 Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id B857E37B400 for ; Tue, 2 Jul 2002 09:22:33 -0700 (PDT) Received: from mail.pcnet.com (pcnet1.pcnet.com [204.213.232.3]) by mx1.FreeBSD.org (Postfix) with ESMTP id 2414243E0A for ; Tue, 2 Jul 2002 09:22:33 -0700 (PDT) (envelope-from eischen@pcnet1.pcnet.com) Received: from localhost (eischen@localhost) by mail.pcnet.com (8.12.3/8.12.1) with ESMTP id g62GMPvZ017340; Tue, 2 Jul 2002 12:22:25 -0400 (EDT) Date: Tue, 2 Jul 2002 12:22:25 -0400 (EDT) From: Daniel Eischen To: Jonathan Lemon Cc: iedowse@maths.tcd.ie, current@FreeBSD.ORG, julian@elischer.org Subject: Re: KSE status report In-Reply-To: <200207021405.g62E58A55302@prism.flugsvamp.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG On Tue, 2 Jul 2002, Jonathan Lemon wrote: > In article you write: > >In message , Ju > >lian Elischer writes: > >>The big problem at the moment is that something in the > >>source tree as a whole, and probably something that came in with KSE > >>is stopping us from successfully compiling a working libc_r. > >>(a bit ironic really). > > > >Is the new > > > > (elm)->field.tqe_next = (void *)-1; > > > >in TAILQ_REMOVE a likely candidate? That could easily tickle old > >bugs in other code. The libc_r code does use a lot of TAILQ macros. > > >From casual inspection of the sources, it appears this may be the case: > > uthread/pthread_private.h: > #define PTHREAD_WORKQ_REMOVE(thrd) do { \ > TAILQ_REMOVE(&_workq,thrd,qe); \ > (thrd)->flags &= ~PTHREAD_FLAGS_IN_WORKQ; \ > } while (0) > > uthread/uthread_kern.c (in multiple locations): > TAILQ_FOREACH(pthread, &_workq, qe) { > .... > PTHREAD_WORKQ_REMOVE(pthread); > } This used to be safe as long as the element removed wasn't re-added to another queue using the same link. There are other places in libc_r where we do re-use the same link (remove from one list and add to another), but roll our own loop in that case: for (p = TAILQ_FIRST(&q); p != NULL; p = p_next) { p_next = TAILQ_NEXT(p, p_qe); ... TAILQ_REMOVE(&q, pthread, p_qe); ... } -- Dan Eischen To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message