Re: BUG #15448: server process (PID 22656) was terminated byexception 0xC0000005 - Mailing list pgsql-bugs

From Amit Langote
Subject Re: BUG #15448: server process (PID 22656) was terminated byexception 0xC0000005
Date
Msg-id 9cb4aa1c-12ba-59c3-fd75-545fa90fb92f@lab.ntt.co.jp
Whole thread Raw
In response to BUG #15448: server process (PID 22656) was terminated by exception0xC0000005  (PG Bug reporting form <noreply@postgresql.org>)
Responses Re: BUG #15448: server process (PID 22656) was terminated byexception 0xC0000005
Re: BUG #15448: server process (PID 22656) was terminated byexception 0xC0000005
Re: BUG #15448: server process (PID 22656) was terminated byexception 0xC0000005
List pgsql-bugs
Hi,

On 2018/10/22 21:34, PG Bug reporting form wrote:
> The following bug has been logged on the website:
> 
> Bug reference:      15448
> Logged by:          Tillmann Schulz
> Email address:      tillmann73@yahoo.de
> PostgreSQL version: 11.0
> Operating system:   Windows
> Description:        
> 
> I have a reproducable error when running two junit test cases in sequence
> from Java with Postgres 11.0.1. With postgres 10 everything worked fine. 
> 
> 
> The error occurs at
> 
> 2018-10-22 14:06:59.651 CEST [22696] LOG:  server process (PID 22656) was
> terminated by exception 0xC0000005
> 2018-10-22 14:06:59.651 CEST [22696] DETAIL:  Failed process was running:
> delete from c5_member

Thanks for the report and the log.

(Today I learned that exception 0xC0000005 is the Windows equivalent of
"segmentation fault".)

> Aft that, postgres is in recovery mode. Shortly after that the database is
> availiably again.
> 
> The complete log of both testcases is:

After observing the test case in the provided log, I managed to reproduce
it with the following:

create table foo (a int primary key, b int);
create table bar (a int references foo on delete cascade, b int);
insert into foo values (1, 1);
insert into foo values (2, 2);
alter table foo add c int;
alter table foo drop c;
delete from foo;
server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.

Analyzing this crash, I located the bug down to GetTupleForTrigger(), but
perhaps it's really in heap_expand_tuple() / expand_tuple(), where the
value of trigger tuple's t_self is being switched from a valid one to an
invalid value.

In heaptuple.c: expand_tuple()


        ItemPointerSetInvalid(&((*targetHeapTuple)->t_self));


FWIW, attached patch fixes this for me.  Adding Andrew whose recent commit
7636e5c60f [1] seems to have introduced the heap_expan_tuple call in
GetTupleForTrigger.  Maybe, he can better judge a fix for this.

Thanks,
Amit

[1] https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=7636e5c60f

Attachment

pgsql-bugs by date:

Previous
From: PG Bug reporting form
Date:
Subject: BUG #15452: 10.5 and reproducible "ERROR: could not read block 0 infile..." when creating functional index
Next
From: Michael Paquier
Date:
Subject: Re: BUG #15448: server process (PID 22656) was terminated byexception 0xC0000005