Mac OS X, PostgreSQL, PL/Tcl

From: Scott Goodwin <scott(at)scottg(dot)net>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Mac OS X, PostgreSQL, PL/Tcl
Date: 2004-02-21 04:34:37
Message-ID: 41D4BE4E-6427-11D8-B0AC-000A95A0910A@scottg.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-hackers

Hoping someone can help me figure out why I can't get PL/Tcl to load
without crashing the backend on Mac OS 10.3.2.

I compile Tcl, PostgreSQL, create the database and then run the
following:

create function plpgsql_call_handler() RETURNS LANGUAGE_HANDLER
as 'plpgsql.so' language 'c';

create trusted procedural language 'plpgsql'
HANDLER plpgsql_call_handler
LANCOMPILER 'PL/pgSQL';

create function pltcl_call_handler() RETURNS LANGUAGE_HANDLER
as 'pltcl.so' language 'c';

create trusted procedural language 'pltcl'
HANDLER pltcl_call_handler
LANCOMPILER 'PL/Tcl';

The PL/pgSQL part loads fine. The PL/Tcl part crashes the server, and
psql reports this:

psql:/Users/scott/pgtest/add_languages.sql:12: server closed the
connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
psql:/Users/scott/pgtest/add_languages.sql:12: connection to server was
lost

I have tried the exact same procedure on Linux without any problems
using the exact same scripts, setup etc. I've tried both PG 7.4.1 and a
CVS copy from 11 Feb. I've used gcc 3.3, 3.1 and 2.85. I've tried
loading PL/Tcl without loading PL/pgSQL at all, same problem. I tried
Tcl 8.4.3, 8.4.4 and 8.4.5. pgtclsh runs fine.

I used ktrace to attach to the PG process and it's generating a
SIGSEGV. I get several "file name too long" errors before the SEGV.
Problem is probably not with PG, but could be with Tcl and/or Mac OS X
loadable libs. Here's the significant portion of it (you can find the
whole output trace at http://scottg.net/pgktrace.txt):

... stuff prior ...

27296 postgres 0.000021 NAMI "/usr/lib/libicucore.A.dylib"
27296 postgres 0.000019 RET open 114/0x72
27296 postgres 0.000009 CALL fstat(0x72,0xbfffdf50)
27296 postgres 0.000009 RET fstat 0
27296 postgres 0.000047 CALL
load_shared_file(0x9019060c,0x605000,0x13b680,0xbfffdd60,0x4,0xbfffdcf0,
0xbfffdd64)
27296 postgres 0.000053 NAMI "/usr/lib/libicucore.A.dylib"
27296 postgres 0.000135 RET load_shared_file 0
27296 postgres 0.000034 CALL close(0x72)
27296 postgres 0.000015 RET close 0
27296 postgres 0.000113 CALL stat(0x800200,0xbfffde20)
27296 postgres 0.000016 NAMI "







/libSystem.B.dylib"
27296 postgres 0.000023 RET stat -1 errno 2 No such file or directory
27296 postgres 0.000021 CALL stat(0x800200,0xbfffde20)
27296 postgres 0.000009 NAMI "







/libSystem.B.dylib"
27296 postgres 0.000017 RET stat -1 errno 2 No such file or directory
27296 postgres 0.004552 CALL stat(0x182ea00,0xbfffd430)
27296 postgres 0.000044 RET stat -1 errno 63 File name too long
27296 postgres 0.000019 CALL stat(0x182ea00,0xbfffd430)
27296 postgres 0.000008 RET stat -1 errno 63 File name too long
27296 postgres 0.000012 CALL stat(0x182ea00,0xbfffd430)
27296 postgres 0.000008 RET stat -1 errno 63 File name too long
27296 postgres 0.000013 CALL stat(0x182ea00,0xbfffd430)
27296 postgres 0.000008 RET stat -1 errno 63 File name too long
27296 postgres 0.000013 CALL stat(0x182ea00,0xbfffd430)
27296 postgres 0.000008 RET stat -1 errno 63 File name too long
27296 postgres 0.000013 CALL stat(0x182ea00,0xbfffd430)
27296 postgres 0.000008 RET stat -1 errno 63 File name too long
27296 postgres 0.000013 CALL stat(0x182ea00,0xbfffd430)
27296 postgres 0.000008 RET stat -1 errno 63 File name too long
27296 postgres 0.000013 CALL stat(0x182ea00,0xbfffd430)
27296 postgres 0.000009 RET stat -1 errno 63 File name too long
27296 postgres 0.000013 CALL stat(0x90104e34,0xbfffd3b0)
27296 postgres 0.000118 NAMI "/"
27296 postgres 0.000019 RET stat 0
27296 postgres 0.000012 CALL lstat(0x182f600,0xbfffd3b0)
27296 postgres 0.000007 NAMI "."
27296 postgres 0.000016 RET lstat 0
27296 postgres 0.000009 CALL stat(0x182f600,0xbfffd1a0)
27296 postgres 0.000006 NAMI ".."
27296 postgres 0.000018 RET stat 0
27296 postgres 0.000009 CALL open(0x182f600,0x4,0xfefefeff)

... more stuff ...

27296 postgres 0.000007 NAMI "../../../../../.."
27296 postgres 0.000021 RET stat 0
27296 postgres 0.000008 CALL open(0x182f600,0x4,0)
27296 postgres 0.000008 NAMI "../../../../../.."
27296 postgres 0.000016 RET open 114/0x72
27296 postgres 0.000009 CALL fstat(0x72,0xbfffd1a0)
27296 postgres 0.000007 RET fstat 0
27296 postgres 0.000007 CALL fcntl(0x72,0x2,0x1)
27296 postgres 0.000007 RET fcntl 0
27296 postgres 0.000008 CALL fstatfs(0x72,0xbfffd200)
27296 postgres 0.000007 RET fstatfs 0
27296 postgres 0.000009 CALL fstat(0x72,0xbfffd3b0)
27296 postgres 0.000007 RET fstat 0
27296 postgres 0.000008 CALL
getdirentries(0x72,0x182fa00,0x1000,0x501b74)
27296 postgres 0.000065 RET getdirentries 640/0x280
27296 postgres 0.000015 CALL lseek(0x72,0,0,0)
27296 postgres 0.000007 RET lseek 0
27296 postgres 0.000009 CALL close(0x72)
27296 postgres 0.000009 RET close 0
27296 postgres 0.000007 CALL lstat(0x182f600,0xbfffd3b0)
27296 postgres 0.000007 NAMI "../../../../../../"
27296 postgres 0.000019 RET lstat 0
27296 postgres 0.000024 CALL stat(0xbfffd4f0,0xbfffd900)
27296 postgres 0.000009 RET stat -1 errno 63 File name too long
27296 postgres 0.140906 PSIG SIGSEGV SIG_DFL
26999 postgres 0.004582 CSW resume kernel
26999 postgres 0.000025 RET select -1 errno 4 Interrupted system call
26999 postgres 0.000010 PSIG SIGCHLD caught handler=0xe59ac mask=0x0
code=0x0
26999 postgres 0.000302 CALL sigprocmask(0x3,0x23fc74,0)
26999 postgres 0.000036 RET sigprocmask 0
26999 postgres 0.000037 CALL wait4(0xffffffff,0xbfffe670,0x1,0)
26999 postgres 0.000086 RET wait4 27296/0x6aa0
26999 postgres 0.000258 CALL write(0x2,0xbfffdd10,0x3d)
26999 postgres 0.000031 GIO fd 2 wrote 61 bytes
"LOG: server process (PID 27296) was terminated by signal 11
"
26999 postgres 0.000009 RET write 61/0x3d
26999 postgres 0.000020 CALL write(0x2,0xbfffdd10,0x34)
26999 postgres 0.000013 GIO fd 2 wrote 52 bytes
"LOG: terminating any other active server processes
"
26999 postgres 0.000008 RET write 52/0x34
26999 postgres 0.000032 CALL kill(0x6a35,0x3)
26999 postgres 0.000020 RET kill 0
26999 postgres 0.000011 CALL sendto(0x6e,0xbfffe5a0,0x18,0,0,0)

thanks,

/s.

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Lane 2004-02-21 04:53:14 Re: date_part returns different results with same interval.
Previous Message Wade Klaver 2004-02-20 22:12:29 Re: date_part returns different results with same interval.

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2004-02-21 04:36:47 Re: 7.4.1 release status - Turkish Locale
Previous Message Greg Patnude 2004-02-21 02:31:00 User defined types -- Social Security number...