pg.ddx.io  pgsql-interfaces@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Doherty EMAIL ACCOUNT <jmdpg@jdoherty.net>
To: pgsql-interface <pgsql-interfaces@postgresql.org.>
Subject: Fw: SEGFAULT ON EXTENDED FUNCTION
Date: Tue, 21 Nov 2006 12:04:35 -0600
Message-ID: <006001c70d97$80b4bde0$c801a8c0@jmdbox> (raw)

Is this telling me that the .so file could not be loaded ?


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.


----- Original Message ----- 
From: Doherty EMAIL ACCOUNT 
To: pgsql-interfaces@postgresql.org 
Sent: Tuesday, November 21, 2006 5:49 AM
Subject: [INTERFACES] SEGFAULT ON EXTENDED FUNCTION


Hopefully someone can help with this;

I have an extension library which basically adds some common financial functions from gnumeric. This has worked just fine for a couple of years on a 32 bit machine running 8.1.0. and still does. I have recently built a new dual core 64 bit gentoo system with 8.1.0 installed.


The library in question compiles and links just fine. I install it in /usr/lib.


When I execute the create or replace function call that also succeeds however when I execute the command .. for example:


select * from eomonth('10/22/2006',0);

1. Is there anything special I should have done when building postgres ?

PG_CONFIG OUTPUT:

BINDIR = /usr/local/pgsql/bin

DOCDIR = /usr/local/pgsql/doc

INCLUDEDIR = /usr/local/pgsql/include

PKGINCLUDEDIR = /usr/local/pgsql/include INCLUDEDIR-SERVER = /usr/local/pgsql/include/server LIBDIR = /usr/local/pgsql/lib PKGLIBDIR = /usr/local/pgsql/lib LOCALEDIR = MANDIR = /usr/local/pgsql/man SHAREDIR = /usr/local/pgsql/share SYSCONFDIR = /usr/local/pgsql/etc PGXS = /usr/local/pgsql/lib/pgxs/src/makefiles/pgxs.mk

CONFIGURE = '--enable-thread-safety' '--with-perl' '--with-pam' '--with-python' '--enable-depend' '--with-gnu-ld'

CC = gcc

CPPFLAGS = -D_GNU_SOURCE

CFLAGS = -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing CFLAGS_SL = -fpic LDFLAGS = -Wl,-rpath,/usr/local/pgsql/lib LDFLAGS_SL = LIBS = -lpgport -lpam -lz -lreadline -lcrypt -lresolv -lnsl -ldl -lm -lbsd VERSION = PostgreSQL 8.1.4




which should return the end of month for argument one I get a seg fault:

********************************* FAULT MESSAGE IN LOG FILE ********************************


Nov 21 05:10:49 gideon postmaster[12461]: segfault at 0000000000000000 rip 00002b3af2c2f3b9 rsp 00007fffb8914398 error 4


CODE FOR EOMONTH:***************************** SNIPPIT ***************************************


PG_FUNCTION_INFO_V1(eomonth);


Datum

eomonth(PG_FUNCTION_ARGS)

{

text *date = PG_GETARG_TEXT_P(0);

int months = PG_GETARG_INT32(1);

GDate sDate;

int serialDate;

int tmp = months;

char mySDate[12];

char *pyear = NULL;

char *pmonth = NULL;

char *pday = NULL;

/* NOW FOR DATE VARS USED WITH parse_date */

char *pdate = NULL;

char pbuf[255];

struct tm tm;


text *myRDate = (text *) palloc(VARHDRSZ + 12);

VARATT_SIZEP(myRDate) = VARHDRSZ + 12;


g_date_clear(&sDate,1);


memset(pbuf,'\0',sizeof(pbuf)); /*initialize buffer */

memcpy(pbuf,VARDATA(date),VARSIZE(date)-VARHDRSZ); /* copy input string to buffer */

pdate = parse_date(pbuf,&tm); /*call parse date and see if we know about format*/

g_date_set_parse(&sDate,pdate);/* now set the GDate object sDate with pdate buf*/


if(g_date_valid(&sDate)) /* is the date we set valid */

{

/*

* now figure the eomonth calc

*/

if(months > 0)

{

g_date_add_months(&sDate,months);

}

if( months < 0)

{

g_date_subtract_months(&sDate,-months);

}

/*

* Now this is the real calculation

*/

g_date_set_day(&sDate,g_date_get_days_in_month(

g_date_get_month(&sDate),

g_date_get_year(&sDate)));


sprintf(VARDATA(myRDate),"%d/%d/%d",

g_date_get_month(&sDate),

g_date_get_day(&sDate),

g_date_get_year(&sDate));

/*

elog(NOTICE,"EOMONTH(%s)",VARDATA(myRDate));

*/


/*

serialDate = datetime_g_to_serial(&sDate);


PG_RETURN_INT32(serialDate);

*/

pfree(myRDate);

PG_RETURN_TEXT_P(myRDate);


}

else

{

elog(ERROR,"EOMONTH date invalid %s ",VARDATA(date));

}

}

view thread (2+ messages)

Message-ID: <006001c70d97$80b4bde0$c801a8c0@jmdbox>
Permalink:  ../006001c70d97$80b4bde0$c801a8c0@jmdbox/
Also on:    postgresql.org/message-id/006001c70d97$80b4bde0$c801a8c0@jmdbox

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-interfaces@postgresql.org
  Cc: jmdpg@jdoherty.net, pgsql-interfaces@postgresql.org.
  Subject: Re: Fw: SEGFAULT ON EXTENDED FUNCTION
  In-Reply-To: <006001c70d97$80b4bde0$c801a8c0@jmdbox>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox