From owner-freebsd-hackers@FreeBSD.ORG Sun Feb 5 12:41:20 2012 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 20FB2106566B; Sun, 5 Feb 2012 12:41:20 +0000 (UTC) (envelope-from listlog2011@gmail.com) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 071438FC1A; Sun, 5 Feb 2012 12:41:20 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.5/8.14.5) with ESMTP id q15CfHIV083142; Sun, 5 Feb 2012 12:41:17 GMT (envelope-from listlog2011@gmail.com) Message-ID: <4F2E78EB.3060007@gmail.com> Date: Sun, 05 Feb 2012 20:41:15 +0800 From: David Xu User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:10.0) Gecko/20120129 Thunderbird/10.0 MIME-Version: 1.0 To: Ivan Voras References: <201201110806.30620.jhb@freebsd.org> <5D37298B-9D68-4F0F-8AAB-E8F2DBB9D9C3@transactionware.com> In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: Garrett Cooper , freebsd-hackers@freebsd.org, Xin LI , davidxu@freebsd.org, Jan Mikkelsen Subject: Re: sem(4) lockup in python? X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: davidxu@freebsd.org List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Feb 2012 12:41:20 -0000 On 2012/2/5 20:02, Ivan Voras wrote: > On 5 February 2012 11:44, Garrett Cooper wrote: > >> 'make MAKE_JOBS_NUMBER=1' is the workground used right now.. > David Xu suggested that it is a bug in Python - it doesn't set > process-shared attribute when it calls sem_init(), but i've tried > patching it (replacing the port patchfile file the one I've attached) > and I still get the hang. Although I don't know where is the python bug, since I don't know the piece of source code. But general rule to use anonymous shared semaphore between forked processes is the semaphore should be initialized in shared memory page and sem_init() with pshared set 1, such as: sem_ptr = mmap(MMAP_SHARED); sem_init(sem_ptr, pshared=1, init_value); Regards, David Xu