From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qt1-x829.google.com (mail-qt1-x829.google.com [IPv6:2607:f8b0:4864:20::829]) by sourceware.org (Postfix) with ESMTPS id F39BB3838032 for ; Tue, 8 Jun 2021 16:26:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org F39BB3838032 Received: by mail-qt1-x829.google.com with SMTP id z4so12702786qts.4 for ; Tue, 08 Jun 2021 09:26:05 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=s5f/jaqToYYmDyIp3BSAWkdCnWwJvJs24otqxjyos8s=; b=odGHB6FVugD6NodCqce/bcO2TkJBdmAz7SkBKenksz1m3WNbTv8J3FcyLQzyYqvaP6 RIMFhdYftXNoOypTB3VeRWwq/RfBEioAb3hkCwYLgkI4TwhfhPJj4dMQ2hRa+dT6oMtl VgNEMx6qfpwNO5bvGfTxuxsDf7KsNY2Duq7/AJeKiPwbTmbAqXKXEdDT8bEz0sllPsel MKwlMUHeuTcc1WlIxLigyfQEfsnxnyE1A90Dd33zr71rzPtNGMo48nk3h3oAzCK895E9 +uJGdJJCPmUCAl4eRmgF/qv16p/BmqzSegY6woMaxgtykZwY8ieHFtDbwJSOncjBFLJX JWpg== X-Gm-Message-State: AOAM533Rs6UZ8lG8M+Ez+r2Qipgrri3P0CL58lXUIXkZx+26vCtfjstu wHq1STzyuRvWtTAAfl/CWd9xLNys0o0= X-Google-Smtp-Source: ABdhPJwACKvHyEASsM/ashQHU3IdNSlNklvC7thhxfqcI9gbLFz/rC2h1Seql/CIfd4WhmFMvXFtMw== X-Received: by 2002:a05:622a:40b:: with SMTP id n11mr18587933qtx.60.1623169565420; Tue, 08 Jun 2021 09:26:05 -0700 (PDT) Received: from ?IPv6:2804:431:d77d:670c::536f:6e69? ([2804:431:d77d:670c::536f:6e69]) by smtp.googlemail.com with ESMTPSA id l18sm2775190qtq.85.2021.06.08.09.26.04 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 08 Jun 2021 09:26:04 -0700 (PDT) Sender: "Soni L." Subject: Re: inode-based dlopen caching To: Adhemerval Zanella , Libc-help References: <62ae59a3-cada-f56c-5f34-5e0cc26ff4d4@linaro.org> <5eec9b26-e1cb-99ad-aab9-f57482b08987@linaro.org> From: "Soni L." Message-ID: Date: Tue, 8 Jun 2021 13:26:01 -0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.0 MIME-Version: 1.0 In-Reply-To: <5eec9b26-e1cb-99ad-aab9-f57482b08987@linaro.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-help@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-help mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 08 Jun 2021 16:26:07 -0000 On 2021-06-08 10:14 a.m., Adhemerval Zanella wrote: > > > On 07/06/2021 19:50, Soni L. wrote: >> >> >> On 2021-06-07 6:53 p.m., Adhemerval Zanella wrote: >>> >>> >>> On 05/06/2021 10:59, Soni L. via Libc-help wrote: >>>> Currently dlopen caching is based on filenames, it'd be nice if it was >>>> based on inodes to support better "re"loading (aka loading a new module >>>> with the same name because unloading modules with threads is never a >>>> good idea). This is good for stuff that deals with plugins. >>>> >>> >>> What do you mean by 'caching' in this scenario? glibc does not maintain >>> a cache of loaded libraries, different than other implementation it >>> does try to unload the library on dlclose (there are cases where it >>> is not readily possible due dependency chains). >>> >>> And I am not seeing how inote-bases dlopen really helps here, if inode >>> changes means that file was potentially changed (so you will need to >>> proper dclose it). I think using filenames is in fact the proper way >>> here, since Linux does the hard lifting of the inode cache and provide >>> fast file access and mmap support for shared libraries. >>> >> You can't unload a dlopen that uses threads, at least not safely. So for >> all intents and purposes you can't unload it. Instead you need to tell >> it you're done with it, but not unload it, and load the new one. But >> that's the problem - the filename-based stuff means you can't load the >> new one. >> > > Sure you can unload a dlopen library, the API makes the program responsible > to synchronize the access (since dlsym/dlvsym returns an function pointer). > [snip] If the shared library creates its own threads, those won't be killed when the shared library is closed. If the shared library is then unloaded, those threads will be running code from the void. That's a problem. Being able to update the library, without getting rid of the original (i.e. by unlinking the original file first), allows the program to gracefully update loaded plugins without a full restart.