From owner-freebsd-hackers Mon May 21 12:46:32 2001 Delivered-To: freebsd-hackers@freebsd.org Received: from meow.osd.bsdi.com (meow.osd.bsdi.com [204.216.28.88]) by hub.freebsd.org (Postfix) with ESMTP id 1329437B424; Mon, 21 May 2001 12:46:27 -0700 (PDT) (envelope-from jhb@FreeBSD.org) Received: from laptop.baldwin.cx (john@jhb-laptop.osd.bsdi.com [204.216.28.241]) by meow.osd.bsdi.com (8.11.2/8.11.2) with ESMTP id f4LJk5G47023; Mon, 21 May 2001 12:46:05 -0700 (PDT) (envelope-from jhb@FreeBSD.org) Message-ID: X-Mailer: XFMail 1.4.0 on FreeBSD X-Priority: 3 (Normal) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 8bit MIME-Version: 1.0 In-Reply-To: <200105211935.f4LJZHx05386@earth.backplane.com> Date: Mon, 21 May 2001 12:46:13 -0700 (PDT) From: John Baldwin To: Matt Dillon Subject: Re: RE: vmspace leak (+ tentative fix) Cc: "Brian F. Feldman" , hackers@FreeBSD.org Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG On 21-May-01 Matt Dillon wrote: > >:>:John Baldwin -- http://www.FreeBSD.org/~jhb/ >:IOW, the vmspace refcount is being (ab)used for the shm stuff. Why not move >:the shmexit() to vmspace_free()? Hmm, I suppose the actual unmapping of all >:the user pages has this problem as well? I guess that vmspace_free() happens >:to hide that bug though as it will release the pages if they are still held >:in >:vm_map_delete() and pmap_release(). If that is the case and it isn't >:harmful, >:why not just postpone all the vmspace release and shmexit to cpu_wait? > > It's important to release resources as early as possible, so zombied > processes don't run the machine out of memory if a parent forgets to > reap its children. You can also get into non-optimal VM interactions > with fork()ing servers if you delay resource freeing when a child > exits (for example, Apache). Also, as per the comment, some things you > have to do while the process is still capable of blocking. This is > why the hack is in there. It is somewhat redundant... you are right, > only the shared memory piece is left hanging when all is said and done. > > Unfortunately when the shared vm space capability was originally added, > the authors introduced a couple of bugs. This is one of them (the > other biggy was with file descriptor open/close/dup races). Ok, then why not let the current shmexit() stay in exit1() as a hack to help free memory, but add in a check in vmspace_free() as well to catch any race conditions that may fall through the cracks? As long as we clear the shm pointer in struct vmspace when we free it then we won't be double free'ing, and will always free it eventually. That is also a much simpler change. :) Additionally, adding to the comment in exit1() clarifying that this is an attempt to free resources as soon as possible and that the race condition is known and that vmspace_free() is a catch-all might be nice as well. -- John Baldwin -- http://www.FreeBSD.org/~jhb/ PGP Key: http://www.baldwin.cx/~john/pgpkey.asc "Power Users Use the Power to Serve!" - http://www.FreeBSD.org/ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message