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
>
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 |
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... |