plperl crashing backend - Mailing list pgsql-general

From Michael Blakeley
Subject plperl crashing backend
Date
Msg-id p05001106b5d86ddbc42d@blakeley.com
Whole thread Raw
In response to Re: regex back-references?  (Michael Blakeley <mike@blakeley.com>)
Responses Re: plperl crashing backend
List pgsql-general
I'm running postgresql 7.0.1 on Solaris 2.6, with the latest patch
cluster. I've compiled pg and Perl 5.6.0 with gcc 2.9.5-2.

I want to do some work with plperl fuctions, for text parsing. So I
run psql and do:

db=# CREATE FUNCTION testfunction(VARCHAR) RETURNS VARCHAR AS
db-# 'return "foo"' LANGUAGE 'plperl';
CREATE
db=# SELECT testfunction('foo');

...after a pause, I see:

pqReadData() -- backend closed the channel unexpectedly.
         This probably means the backend terminated abnormally
         before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.
!#

truss-ing the backend process while this is happening doesn't show
much. Here it is, though:
9973/1:         recv(6, 0x0017D8F0, 8192, 0)    (sleeping...)
9973/1:         recv(6, " Q S E L E C T   t e s t".., 8192, 0)  = 27
9973/1:         time()                                          = 968015516
9973/1:         open("/usr/local/pgsql/data/base/db/pg_aggregate", O_RDWR)
  = 35
9973/1:         lseek(35, 0, SEEK_END)                          = 8192
9973/1:         lseek(13, 0, SEEK_END)                          = 8192
9973/1:         lseek(15, 0, SEEK_END)                          = 8192
9973/1:         lseek(15, 0, SEEK_END)                          = 8192
9973/1:         lseek(16, 0, SEEK_END)                          = 16384
9973/1:         lseek(16, 0, SEEK_END)                          = 16384
9973/1:         open("/usr/local/pgsql/data/base/db/pg_aggregate_name_type
_index", O_RDWR) = 36
9973/1:         lseek(36, 0, SEEK_END)                          = 16384
9973/1:         lseek(36, 0, SEEK_SET)                          = 0
9973/1:         read(36, "\0\b1FF01FF0  \0\005 1 b".., 8192)    = 8192
9973/1:         lseek(36, 8192, SEEK_SET)                       = 8192
9973/1:         read(36, "\0BC17801FF0  \0 ?8080 0".., 8192)    = 8192
9973/1:         lseek(35, 0, SEEK_END)                          = 8192
9973/1:         lseek(35, 0, SEEK_SET)                          = 0
9973/1:         read(35, "\0BC\r p  \0  \0 ?  80 m".., 8192)    = 8192
9973/1:         lseek(13, 0, SEEK_END)                          = 8192
9973/1:         lseek(15, 0, SEEK_END)                          = 8192
9973/1:         lseek(15, 0, SEEK_END)                          = 8192
9973/1:         lseek(15, 0, SEEK_END)                          = 8192
9973/1:         lseek(16, 0, SEEK_END)                          = 16384
9973/1:         lseek(16, 0, SEEK_END)                          = 16384
9973/1:         lseek(16, 0, SEEK_END)                          = 16384
9973/1:         open("/usr/local/pgsql/data/base/db/pg_proc_proname_narg_t
ype_index", O_RDWR) = 37
9973/1:         lseek(37, 0, SEEK_END)                          = 229376
9973/1:         lseek(37, 0, SEEK_SET)                          = 0
9973/1:         read(37, "\0\b1FF01FF0  \0\005 1 b".., 8192)    = 8192
9973/1:         lseek(37, 24576, SEEK_SET)                      = 24576
9973/1:         read(37, "\0 p14901FF0  \0 ?\080 p".., 8192)    = 8192
9973/1:         lseek(37, 139264, SEEK_SET)                     = 139264
9973/1:         read(37, "\0C4\v `1FF0  \0 ?\080 p".., 8192)    = 8192
9973/1:         lseek(33, 204800, SEEK_SET)                     = 204800
9973/1:         read(33, "\0A80198  \0  \0 >8080BD".., 8192)    = 8192
9973/1:         lseek(25, 8192, SEEK_SET)                       = 8192
9973/1:         read(25, "01  01 `  \0  \0 ?  80 m".., 8192)    = 8192
9973/1:         lseek(34, 49152, SEEK_SET)                      = 49152
9973/1:         read(34, "039011D01FF0  \0 ?C08010".., 8192)    = 8192
9973/1:         open("/usr/local/pgsql/data/base/db/pg_language", O_RDWR)
= 38
9973/1:         lseek(38, 0, SEEK_END)                          = 8192
9973/1:         lseek(13, 0, SEEK_END)                          = 8192
9973/1:         lseek(15, 0, SEEK_END)                          = 8192
9973/1:         lseek(16, 0, SEEK_END)                          = 16384
9973/1:         open("/usr/local/pgsql/data/base/db/pg_language_oid_index"
, O_RDWR) = 39
9973/1:         lseek(39, 0, SEEK_END)                          = 16384
9973/1:         lseek(39, 0, SEEK_SET)                          = 0
9973/1:         read(39, "\0\b1FF01FF0  \0\005 1 b".., 8192)    = 8192
9973/1:         lseek(39, 8192, SEEK_SET)                       = 8192
9973/1:         read(39, "\0181FB01FF0  \0 ?C08010".., 8192)    = 8192
9973/1:         lseek(38, 0, SEEK_SET)                          = 0
9973/1:         read(38, "\0181EA8  \0  \0 ? `80 O".., 8192)    = 8192
9973/1:         stat("/usr/local/pgsql/lib/plperl.so", 0xEFFFDD98) = 0
9973/1:         open("/usr/local/pgsql/lib/plperl.so", O_RDONLY) = 40
9973/1:         fstat(40, 0xEFFFDB7C)                           = 0
9973/1:         mmap(0x00000000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE, 40, 0)
= 0xEF590000
9973/1:         mmap(0x00000000, 90112, PROT_READ|PROT_EXEC,
MAP_PRIVATE, 40, 0)
  = 0xED3E0000
9973/1:         mmap(0xED3F2000, 9060,
PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVA
TE|MAP_FIXED, 40, 8192) = 0xED3F2000
9973/1:         munmap(0xED3E4000, 57344)                       = 0
9973/1:         memcntl(0xED3E0000, 6604, MC_ADVISE, 0x0003, 0, 0) = 0
9973/1:         close(40)                                       = 0
9973/1:
open("/usr/local/lib/perl5/5.6.0/sun4-solaris/auto/Opcode/Opcode
.so", O_RDONLY) = 40
9973/1:         fstat(40, 0xEFFFDAAC)                           = 0
9973/1:         mmap(0xEF590000, 8192, PROT_READ|PROT_EXEC,
MAP_PRIVATE|MAP_FIXE
D, 40, 0) = 0xEF590000
9973/1:         mmap(0x00000000, 90112, PROT_READ|PROT_EXEC,
MAP_PRIVATE, 40, 0)
  = 0xED3C0000
9973/1:         mmap(0xED3D4000, 4216,
PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVA
TE|MAP_FIXED, 40, 16384) = 0xED3D4000
9973/1:         munmap(0xED3C6000, 57344)                       = 0
9973/1:         memcntl(0xED3C0000, 6240, MC_ADVISE, 0x0003, 0, 0) = 0
9973/1:         close(40)                                       = 0
9973/1:         open("/usr/lib/libperl.so", O_RDONLY)           = 40
9973/1:         fstat(40, 0xEFFFDAAC)                           = 0
9973/1:         mmap(0xEF590000, 8192, PROT_READ|PROT_EXEC,
MAP_PRIVATE|MAP_FIXE
D, 40, 0) = 0xEF590000
9973/1:         mmap(0x00000000, 1171456, PROT_READ|PROT_EXEC, MAP_PRIVATE, 40,
0) = 0xED280000
9973/1:         mmap(0xED38E000, 56028,
PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIV
ATE|MAP_FIXED, 40, 1040384) = 0xED38E000
9973/1:         open("/dev/zero", O_RDONLY)                     = 41
9973/1:         mmap(0xED39C000, 1536,
PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVA
TE|MAP_FIXED, 41, 0) = 0xED39C000
9973/1:         munmap(0xED380000, 57344)                       = 0
9973/1:         memcntl(0xED280000, 136444, MC_ADVISE, 0x0003, 0, 0) = 0
9973/1:         close(40)                                       = 0
9973/1:         mprotect(0xED3E0000, 15895, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
9973/1:         mprotect(0xED3E0000, 15895, PROT_READ|PROT_EXEC) = 0
9973/1:         mprotect(0xED3C0000, 19335, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
9973/1:         mprotect(0xED3C0000, 19335, PROT_READ|PROT_EXEC) = 0
9973/1:         mprotect(0xED280000, 1042504, PROT_READ|PROT_WRITE|PROT_EXEC) =
0
9973/1:         mprotect(0xED280000, 1042504, PROT_READ|PROT_EXEC) = 0
9973/1:         close(41)                                       = 0
9973/1:         munmap(0xEF590000, 8192)                        = 0
9973/1:         brk(0x0039EBB8)                                 = 0
9973/1:         brk(0x003A0BB8)                                 = 0
9973/1:         getuid()                                        = 101 [101]
9973/1:         getuid()                                        = 101 [101]
9973/1:         getgid()                                        = 100 [100]
9973/1:         getgid()                                        = 100 [100]
9973/1:         time()                                          = 968015516
9973/1:         getcontext(0xEFFFDB50)
9973/1:             Incurred fault #5, FLTACCESS  %pc = 0xED2AB9E8
9973/1:               siginfo: SIGBUS BUS_ADRALN addr=0x001F5045
9973/1:             Received signal #10, SIGBUS [default]
9973/1:               siginfo: SIGBUS BUS_ADRALN addr=0x001F5045
9973/1:                 *** process killed ***

The postgres log is also uninformative:

>Server process (pid 8307) exited with status 138 at Sun Sep  3 14:04:38 2000
>Terminating any active server processes...
>The Data Base System is in recovery mode
>NOTICE:  Message from PostgreSQL backend:
>         The Postmaster has informed me that some other backend died
>abnormally and possibly corrupted shared memory.
>         I have rolled back the current transaction and am going to
>terminate your database system connection and exit.
>         Please reconnect to the database system and repeat your query.
>Server processes were terminated at Sun Sep  3 14:04:38 2000
>Reinitializing shared memory and semaphores
>DEBUG:  Data Base System is starting up at Sun Sep  3 14:04:38 2000
>DEBUG:  Data Base System was interrupted being in production at Sun
>Sep  3 13:54:36 2000
>DEBUG:  Data Base System is in production state at Sun Sep  3 14:04:38 2000

Any ideas?

thanks,
-- Mike

pgsql-general by date:

Previous
From: Alfred Perlstein
Date:
Subject: Re: Indexes not working (bug in 7.0.2?)
Next
From: Tom Lane
Date:
Subject: Re: Indexes not working (bug in 7.0.2?)