From owner-freebsd-arch@FreeBSD.ORG Sun Mar 18 20:44:51 2007 Return-Path: X-Original-To: freebsd-arch@freebsd.org Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 7230C16A40A for ; Sun, 18 Mar 2007 20:44:51 +0000 (UTC) (envelope-from dan@dan.emsphone.com) Received: from dan.emsphone.com (dan.emsphone.com [199.67.51.101]) by mx1.freebsd.org (Postfix) with ESMTP id EC5C913C4E8 for ; Sun, 18 Mar 2007 20:44:40 +0000 (UTC) (envelope-from dan@dan.emsphone.com) Received: from dan.emsphone.com (dan@localhost [127.0.0.1]) by dan.emsphone.com (8.14.0/8.13.8) with ESMTP id l2IKPF3r076303 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Sun, 18 Mar 2007 15:25:15 -0500 (CDT) (envelope-from dan@dan.emsphone.com) Received: (from dan@localhost) by dan.emsphone.com (8.14.0/8.14.0/Submit) id l2IKPF3D076302; Sun, 18 Mar 2007 15:25:15 -0500 (CDT) (envelope-from dan) Date: Sun, 18 Mar 2007 15:25:15 -0500 From: Dan Nelson To: Giorgos Keramidas Message-ID: <20070318202515.GF64778@dan.emsphone.com> References: <45F906ED.8070100@aueb.gr> <200703151827.39963.max@love2party.net> <20070318053307.GC73385@funkthat.com> <20070318134900.GA98260@kobe.laptop> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20070318134900.GA98260@kobe.laptop> X-OS: FreeBSD 6.2-STABLE User-Agent: Mutt/1.5.14 (2007-02-12) Cc: Kip Macy , John-Mark Gurney , freebsd-threads@freebsd.org, freebsd-arch@freebsd.org, Max Laier Subject: Re: Multithreaded qsort(3) X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Mar 2007 20:44:51 -0000 In the last episode (Mar 18), Giorgos Keramidas said: > On 2007-03-17 23:43, Kip Macy wrote: > > Reminds me of how Solaris blindly uses vfork for implementing > > system(3). It was very easy for a naive user (me) to call system > > from a multi-threaded python application. I had numerous failures > > that were impossible to track back to system(3). > > It seems like an 'obvious' optimization, though. vfork() will block > the parent process until the child runs exec(), and the whole purpose > of system is to exec() a shell and run an external command. > > Can you elaborate on the problems you were seeing? It sounds like > something both interesting and educational :) Btw - the Solaris 10 system manpage only mentions signal interactions as the cause for MT-unsafeness: "The system() function manipulates the signal handlers for SIGINT, SIGQUIT, and SIGCHLD. It is therefore not safe to call system() in a multithreaded process, since some other thread that manipulates these signal handlers and a thread that concurrently calls system() can interfere with each other in a destructive manner. If, however, no such other thread is active, system() can safely be called concurrently from multiple threads. See popen(3C) for an alternative to system() that is thread-safe." It looks like there were some vfork-related system() bugs in older versions of Solaris, but they appear to have been fixed: http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=4332595 -- Dan Nelson dnelson@allantgroup.com