From owner-freebsd-threads@FreeBSD.ORG Sat Nov 15 07:48:12 2003 Return-Path: Delivered-To: freebsd-threads@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 8303C16A4CE; Sat, 15 Nov 2003 07:48:12 -0800 (PST) Received: from mail.pcnet.com (mail.pcnet.com [204.213.232.4]) by mx1.FreeBSD.org (Postfix) with ESMTP id 34C5A43FB1; Sat, 15 Nov 2003 07:48:11 -0800 (PST) (envelope-from eischen@vigrid.com) Received: from mail.pcnet.com (mail.pcnet.com [204.213.232.4]) by mail.pcnet.com (8.12.10/8.12.1) with ESMTP id hAFFm91G013847; Sat, 15 Nov 2003 10:48:09 -0500 (EST) Date: Sat, 15 Nov 2003 10:48:09 -0500 (EST) From: Daniel Eischen X-Sender: eischen@pcnet5.pcnet.com To: Marcel Moolenaar In-Reply-To: <20031115031906.GA52831@dhcp01.pn.xcllnt.net> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII cc: threads@freebsd.org cc: davidxu@freebsd.org Subject: Re: KSE/ia64 broken X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Nov 2003 15:48:12 -0000 On Fri, 14 Nov 2003, Marcel Moolenaar wrote: > Gang, > > The following change broke KSE on ia64: > > -------- > revision 1.18 > date: 2003/11/08 06:07:04; author: davidxu; state: Exp; lines: +16 -17 > Use THR lock instead of KSE lock to avoid scheduler be blocked in spinlock. > > Reviewed by: deischen > -------- > > We seem to be clobbering the thread structure instead of writing > to the mailbox. This happens at initialization. Can it be that > the change assumes PER_KSE and doesxn't work for PER_THREAD? I assume this is coming from a malloc() or free() which uses a spinlock. Spinlocks shouldn't be called at initialization; everything using spinlocks should be conditional based on __isthreaded != 0. Also, libpthread shouldn't be calling malloc() or free() after initialization unless it is within the context of a thread. There seems to be a case where the current thread isn't set or it is the fake thread and malloc() or free() is called. Is this repeatable on a simple threaded application (we can reproduce it on plutoX)? -- Dan Eischen