From owner-freebsd-threads@FreeBSD.ORG Sat May 31 01:55:32 2008 Return-Path: Delivered-To: freebsd-threads@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9D519106566B; Sat, 31 May 2008 01:55:32 +0000 (UTC) (envelope-from bright@elvis.mu.org) Received: from elvis.mu.org (elvis.mu.org [192.203.228.196]) by mx1.freebsd.org (Postfix) with ESMTP id 7242C8FC1D; Sat, 31 May 2008 01:55:32 +0000 (UTC) (envelope-from bright@elvis.mu.org) Received: by elvis.mu.org (Postfix, from userid 1192) id 384491A4D82; Fri, 30 May 2008 18:55:32 -0700 (PDT) Date: Fri, 30 May 2008 18:55:32 -0700 From: Alfred Perlstein To: John Baldwin Message-ID: <20080531015532.GN48790@elvis.mu.org> References: <483FA1C0.2010506@freebsd.org> <20080530184141.GG48790@elvis.mu.org> <200805302145.49524.jhb@freebsd.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200805302145.49524.jhb@freebsd.org> User-Agent: Mutt/1.4.2.3i Cc: David Xu , freebsd-threads@freebsd.org Subject: Re: pthread_cleanup_push as a macro X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 31 May 2008 01:55:32 -0000 * John Baldwin [080530 18:49] wrote: > On Friday 30 May 2008 02:41:41 pm Alfred Perlstein wrote: > > * David Xu [080529 23:40] wrote: > > > I would like to make pthread_cleanup_push and pthread_cleanup_pop as a > > > pair of macros, the current implementation has to malloc() and free() a > > > pthread_cleanup memory block everytime, this is slow, the new one > > > simply uses stack space, note that other OSes have already done it in > > > this way. The patch keeps old functions and should not have binary > > > compatible problem. > > > > > > http://people.freebsd.org/~davidxu/patch/pthread_cleanup_push.patch > > > > Heh, when I had to use QNX on a project this totally confused > > me, but if others are doing it then go for it. > > > > Does Solaris do it? > > It's explicitly documented in the standard that push and pop may be > implemented as macros and that they have to be paired at the same block level > (i.e. it's permitted for push to start a new block and declare a new local > variable and for pop to end that block similar to DROP_GIANT/PICKUP_GIANT in > the kernel). Internally the thread libraries already do this for internal > push/pops to avoid deadlocks. I figured it was "OK", just was interested in how Solaris did it. -- - Alfred Perlstein