From owner-freebsd-threads@FreeBSD.ORG Thu Feb 24 15:49:27 2005 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 58F5016A4CE; Thu, 24 Feb 2005 15:49:27 +0000 (GMT) Received: from cyrus.watson.org (cyrus.watson.org [204.156.12.53]) by mx1.FreeBSD.org (Postfix) with ESMTP id 2109643D2D; Thu, 24 Feb 2005 15:49:25 +0000 (GMT) (envelope-from robert@fledge.watson.org) Received: from fledge.watson.org (fledge.watson.org [204.156.12.50]) by cyrus.watson.org (Postfix) with SMTP id 70BB346B35; Thu, 24 Feb 2005 10:49:24 -0500 (EST) Date: Thu, 24 Feb 2005 15:47:40 +0000 (GMT) From: Robert Watson X-Sender: robert@fledge.watson.org To: threads@FreeBSD.org, alfred@FreeBSD.org Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Subject: POSIX semaphores and fork() -- when any process exits, they all lose , access 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: Thu, 24 Feb 2005 15:49:27 -0000 I was writing some code to exercise POSIX semaphores this morning, and ran into the following issue: If I create a named POSIX semaphore in a process, then fork(), the semaphore appears to be visible to both the parent and child. However, as soon as the child exits, the semaphore disappears from the parent. This seems likely incorrect, although I don't have a copy of the spec in question so couldn't say for sure. It strikes me that the semaphores should either be shared as of exit, with the child and the parent both having references to it, or they should remain only with the parent, and the childs semaphores should be invalidated/corrupted/something. No doubt POSIX has something to say on the topic. Looking at the kernel code, it looks like the semaphore code is aware of process exit() and exec(), but not fork(), which is probably what leads to this behavior. Since POSIX semaphores in the threaded case involve cooperation between the library and kernel to implement, I suspect getting the semantics right may require a bit of work. Does anyone know what the semantics should be, and/or is interested in making our implementation fit those semantics? Thanks, Robert N M Watson