Re: Debugging C functions...

From: Dima Tkach <dmitry(at)openratings(dot)com>
To: Dmitry Tkach <dmitry(at)openratings(dot)com>
Subject: Re: Debugging C functions...
Date: 2002-03-16 05:26:52
Message-ID: 3C92D79C.9020306@openratings.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-sql

Ok, never mind - I got it :-)
I should be 8*sizeof(long) in the array declaration...
Ahh.. sorry for such a stupid question...

Dima

Dmitry Tkach wrote:
> Hi, everybody!
>
> Here is me again, with my bitwise indexing troubles :-)
> (Refer to btree index extension topic from yesterday)...
>
> I have, pretty much, given up the idea to make btrees (or rtrees) do
> what I need... now I am trying to make it work with a GiST index (as Tom
> Lane suggested earlier)... Because I am too stupid and too lazy to
> figure out how to implement GiST from scratch, I am trying to use the
> intarray code from contrib - it seems to do exactly what I need, except
> it deals with _int4 arrays instead of bitsets.
>
> So, I wrote a C function called pack (should be unpack really, but never
> mind :-), that converts my bits into an array, and try to index my table:
>
> create index bset_idx on bset using gist (pack (flags));
>
> this runs for a few minutes, and then the backend crashes. All I can see
> in the log is:
>
> ----
> Server process (pid 29372) exited with status 11 at Fri Mar 15 18:33:50 2002
> Terminating any active server processes...
> Server processes were terminated at Fri Mar 15 18:33:50 2002
> Reinitializing shared memory and semaphores
> The Data Base System is starting up
> ----
>
> I assume, there must be some bug in the func. I wrote, that's causing
> the crash... The question is - how do I debug it?
> Are there some techniques to do that (like attaching to the running
> backend with a debugger, or something else, perhaps, somehow turning
> more debug output on)?
>
> Below is the entire C code I wrote (I am attaching it, hoping, that,
> perhaps, somebody would be able to just spot the problem by looking at
> it)... It creates one function, that takes an int4 (the bits) and a
> second arg, being the maximum bit, that can be set (this is to be able
> to work with both int2 and int4)...
> And then I have sql wrappers:
>
> create function pack(int4) returns _int4 as 'select pack($1, 1<<31);'
> language 'sql';
> create function pack(int2) returns _int4 as 'select pack($1::int4,
> 1<<15);' language 'sql';
>
> Here is the C source:
>
>
> #include "postgres.h"
> #include "utils/array.h"
>
> ArrayType *pack(int,long);
> ArrayType *wrap_array(void *, int, int);
>
> ArrayType *pack (int bits, long max)
> {
> static int4 buff [sizeof (long)];
> long b;
> int count;
>
> for (b = 1, count = 0; b <= max; b <<= 1)
> if (bits & b)
> buff [count++] = b;
> return wrap_array (buff, count, sizeof(int4));
> }
>
> ArrayType *wrap_array (void *ptr, int alen, int elen)
> {
> int numbytes = alen*elen;
> int sz = numbytes + ARR_OVERHEAD (1);
> ArrayType *result = (ArrayType *) palloc (sz);
> result -> size = sz;
> result -> ndim = 1;
> result -> flags = 0;
> ARR_DIMS(result)[0] = alen;
> ARR_LBOUND(result)[0] = 1;
> memmove (ARR_DATA_PTR(result), ptr, numbytes);
> return result;
> }
>
> I compile it with:
> gcc -Wall -Wmissing-prototypes -Wmissing-declarations -fpic -I.
> -I../../src/include -DPGSQL71 -c _bits.c -o _bits.o
>
> I will greatly appreciate your responses...
>
> Thanks a lot!
>
> Dima
>
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster
>

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Arsalan Zaidi 2002-03-16 05:56:31 Back end dies...
Previous Message Carlo Florendo 2002-03-16 02:17:36 Re: pg_hba.conf

Browse pgsql-sql by date

  From Date Subject
Next Message Masaru Sugawara 2002-03-16 09:23:33 Re: simple problem
Previous Message Dmitry Tkach 2002-03-16 02:04:23 Debugging C functions...