Date: Thu, 24 Jul 2003 20:17:02 +0200 From: Steve O'Hara-Smith <steve@sohara.org> To: Barney Wolff <barney@databus.com> Cc: freebsd-stable@freebsd.org Subject: Re: malloc does not return null when out of memory Message-ID: <20030724201702.6667b707.steve@sohara.org> In-Reply-To: <20030724164522.GA39964@pit.databus.com> References: <20030723173427.GA72876@vmunix.com> <20030723173427.GA72876@vmunix.com> <5.2.0.9.0.20030723234250.052821e8@192.168.0.12> <20030724070936.GA16762@rot13.obsecurity.org> <3F1FF81F.5050701@mac.com> <20030724164522.GA39964@pit.databus.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 24 Jul 2003 12:45:22 -0400 Barney Wolff <barney@databus.com> wrote: BW> On Thu, Jul 24, 2003 at 11:15:43AM -0400, Chuck Swiger wrote: BW> > BW> > +/* write a single byte per page to disable overcommit behavior */ BW> > +static int malloc_overcommit; BW> BW> Won't this merely die in malloc, not return 0? Yes - it needs to trap the SEGV as well to produce the wanted behaviour, something like: + else if (malloc_overcommit) { + ocsighandleron(); + for (stride = 0; stride <= size; stride += malloc_pagesize) { + ((char *)result)[stride] = SOME_JUNK; + if (ocsignalled) { + ocsighandleroff(); + return NULL; + } + } + ocsighandleroff(); + } Where ocsighandleron() installs a SEGV handler that sets ocsignalled when called and ocsighandleroff() installs the original one. BTW malloc_overcommit seems to be upside down, I left it that way. -- C:>WIN | Directable Mirrors The computer obeys and wins. |A Better Way To Focus The Sun You lose and Bill collects. | licenses available - see: | http://www.sohara.org/
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030724201702.6667b707.steve>