From owner-freebsd-hackers@FreeBSD.ORG Tue Jan 1 18:41:57 2008 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 2C6E016A419 for ; Tue, 1 Jan 2008 18:41:57 +0000 (UTC) (envelope-from kientzle@freebsd.org) Received: from kientzle.com (h-66-166-149-50.snvacaid.covad.net [66.166.149.50]) by mx1.freebsd.org (Postfix) with ESMTP id 03BE713C455 for ; Tue, 1 Jan 2008 18:41:56 +0000 (UTC) (envelope-from kientzle@freebsd.org) Received: (from root@localhost) by kientzle.com (8.12.9/8.12.9) id m01IfqQS075669; Tue, 1 Jan 2008 10:41:52 -0800 (PST) (envelope-from kientzle@freebsd.org) Received: from [10.0.0.209] (p54.kientzle.com [66.166.149.54]) by kientzle.com with SMTP; Tue, 01 Jan 2008 10:41:51 -0800 (PST) (envelope-from kientzle@freebsd.org) Message-ID: <477A896F.4050509@freebsd.org> Date: Tue, 01 Jan 2008 10:41:51 -0800 From: Tim Kientzle User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7.12) Gecko/20060422 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Alexander Kabaev References: <18297.6718.750894.937199@yeti.mininet> <20071231142620.39f2fbd2@kan.dnsalias.net> <18297.20596.564077.568365@yeti.mininet> <4779AD03.1060505@freebsd.org> <20080101104018.0fe51d67@kan.dnsalias.net> In-Reply-To: <20080101104018.0fe51d67@kan.dnsalias.net> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-hackers@freebsd.org, Markus Hoenicka Subject: Re: dlopen(), atexit() crash on FreeBSD (testcase included) X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 01 Jan 2008 18:41:57 -0000 >>>Also, I'm wondering how other OSes handle this. I don't see this >>>code crash on Linux, contrary to its design as you say. >> >>I would be curious to see the results of running your >>sample program ... on Linux to see whether it calls the >>registered exit function at dlclose time or never. > > Linux pulls hidden atexit symbol into every binary that uses it > ... Linux calls atexit entries at object unload time. > > Solaris implements a libc callback from ld.so.1 ... > Solaris calls atexit callback when removing it too. Interesting. So the consensus here (at least for Linux and Solaris, anyone know about Mac OS?) seems to be that atexit() can be called from a dynamically loaded library and that functions registered this way will be called at library unload time. And FreeBSD doesn't implement this behavior. Tim Kientzle