One, you should remove sqlite-users at sqlite.org from your To list. I keep
bouncing email when I reply to you. Not a big deal, just an FYI.

Two:

On Sun, May 3, 2015 at 2:13 PM, James K. Lowden <jklowden at schemamania.org>
wrote:

> On Thu, 30 Apr 2015 12:47:57 -0600
> Scott Robison <scott at casaderobison.com> wrote:
>
> > Perhaps you are correct and "sigsegv" is not the literal signal that
> > is triggered in this case. I don't care, really. The fact is that an
> > apparently valid pointer was returned from a memory allocation
> > function yet can result in an invalid access for whatever reason (out
> > of memory, in this case). The Linux OOM killer may kill the offending
> > process (which is what one would expect, but one would also expect
> > malloc to return null, so we already know not to expect the
> > expected). Or it may kill some other process which has done nothing
> > wrong! Sure, the OS is protecting the two processes address space
> > from one another, but it seems to me that if one process can kill
> > another process, there is a problem.
>
> I have no argument with you, Scott.  It's neither the first nor last
> thing Linix implemented in the name of efficiency that undid what
> previously were guarantees.  My only angels-on-the-head-of-a-pin
> argument is that the OOM-killer doesn't invalidate malloc-returned
> pointers in particular.  It sweeps with a much broader brush, you might
> say.   ;-)
>

Okay, I think I see what you're saying, though there seem to be a number of
anecdotes online about people who do get a sigsegv from some simple memory
allocation strategies (designed to allocate all available memory). I would
not discount the possibility of a sigsegv, but agree that it is probably
not supposed to happen given the way optimistic memory allocation is
claimed to work.


> SIGSEGV *is* significant to the OP because it doesn't signify heap
> exhaustion.  If that signal was triggered in the heap, it indicates
> heap corruption.  If it was triggered in the stack, it suggests the
> stack might been exhausted, perhaps before a pure OOM condition was
> reached.
>

The code I was referring to in earlier posts performed a realloc. I wonder
if perhaps there is a corner case in there. Growing a block potentially
means moving a block, so if the library was copying from a previously
allocated block to a new block, maybe that could result in a segfault?

Or maybe another explanation could be that some other library other piece
of code replaced the default malloc-family functions.

-- 
Scott Robison

Reply via email to