From owner-freebsd-current@FreeBSD.ORG Thu Sep 10 07:45:33 2009 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EC2B3106566B; Thu, 10 Sep 2009 07:45:33 +0000 (UTC) (envelope-from nkoch@demig.de) Received: from www61.your-server.de (www61.your-server.de [213.133.104.61]) by mx1.freebsd.org (Postfix) with ESMTP id A964F8FC12; Thu, 10 Sep 2009 07:45:33 +0000 (UTC) Received: from [217.7.243.216] (helo=firewall.demig.intra) by www61.your-server.de with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.69) (envelope-from ) id 1MleLT-0004Yu-T9; Thu, 10 Sep 2009 09:45:32 +0200 Received: from [192.168.148.83] (ws-pr-3a.demig.intra [192.168.148.83]) by firewall.demig.intra (8.14.3/8.14.0) with ESMTP id n8A7jH0O046522; Thu, 10 Sep 2009 09:45:17 +0200 (CEST) (envelope-from nkoch@demig.de) Message-ID: <4AA8AE8D.7080307@demig.de> Date: Thu, 10 Sep 2009 09:45:17 +0200 From: Norbert Koch User-Agent: Thunderbird 2.0.0.23 (Windows/20090812) MIME-Version: 1.0 To: John Baldwin References: <4AA7D4BA.40002@demig.de> <200909091507.32600.jhb@freebsd.org> In-Reply-To: <200909091507.32600.jhb@freebsd.org> X-Enigmail-Version: 0.96.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.64 on 192.168.148.235 X-Authenticated-Sender: webmaster@demig.de X-Virus-Scanned: Clear (ClamAV 0.95.1/9791/Thu Sep 10 03:03:33 2009) Cc: freebsd-current@freebsd.org Subject: Re: lock order reversal etc. X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 10 Sep 2009 07:45:34 -0000 John Baldwin schrieb: > Try this patch for this one: > > Index: daemon_saver.c > =================================================================== > --- daemon_saver.c (revision 196974) > +++ daemon_saver.c (working copy) > @@ -351,11 +351,23 @@ > static int > daemon_init(video_adapter_t *adp) > { > + size_t hostlen; > > mtx_lock(&prison0.pr_mtx); > - messagelen = strlen(prison0.pr_hostname) + 3 + strlen(ostype) + 1 + > - strlen(osrelease); > - message = malloc(messagelen + 1, M_DEVBUF, M_WAITOK); > + for (;;) { > + hostlen = strlen(prison0.pr_hostname); > + mtx_unlock(&prison0.pr_mtx); > + > + messagelen = hostlen + 3 + strlen(ostype) + 1 + > + strlen(osrelease); > + message = malloc(messagelen + 1, M_DEVBUF, M_WAITOK); > + mtx_lock(&prison0.pr_mtx); > + if (hostlen < strlen(prison0.pr_hostname)) { > + free(message, M_DEVBUF); > + continue; > + } > + break; > + } > sprintf(message, "%s - %s %s", prison0.pr_hostname, ostype, osrelease); > mtx_unlock(&prison0.pr_mtx); > blanked = 0; > That works for me. Thank you.