Thread: Problem integrating C stub

Problem integrating C stub

From
Smita Vijayakumar
Date:
Hi,
While integrating C stub in stored procedure, I came across the
following problem whenever the SP was triggered:
"
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
"

My C code looks like this:
"
PG_FUNCTION_INFO_V1(abc);

Datum abc(PG_FUNCTION_ARGS)
{
    VarChar *arg1 ;
    char *str;
    arg1=(VarChar *) PG_GETARG_VARCHAR_P(0);
    int str1Size = VARSIZE(arg1) - VARHDRSZ;
    if (arg1) str = (char *) VARDATA(arg1);
    short int ret ;

    str[str1Size]='\0';
    ret =anotherfunc(str); // anotherfunc() returns smallint

    PG_RETURN_INT16(ret);
}

"

I am not sure what I am doing wrong, but I notice whenever I comment out
the code for extraction of the arguments
"
    arg1=(VarChar *) PG_GETARG_VARCHAR_P(0);
      int str1Size = VARSIZE(arg1) - VARHDRSZ;
    if (arg1) str = (char *) VARDATA(arg1);
"

the code ceases to throw the error.
The function has been declared as
"
CREATE FUNCTION abc(varchar) RETURNS smallint AS '/path/abc.so', 'abc'
LANGUAGE C STRICT;
"

Am I missing something?

Thanks,
Smita

Re: Problem integrating C stub

From
"Heikki Linnakangas"
Date:
Smita Vijayakumar wrote:
> Am I missing something?

Yes. You missed the description of this mailing list:

"Notification of CVS commits are sent to this list. Do not post here!"

Try pgsql-general@postgresql.org.

Note that you're not allowed to modify the pointer returned by
PG_GETARG_XXX macros. See
http://www.postgresql.org/docs/8.3/interactive/xfunc-c.html#AEN40854

--
   Heikki Linnakangas
   EnterpriseDB   http://www.enterprisedb.com