From: | Keith Parks <emkxp01(at)mtcc(dot)demon(dot)co(dot)uk> |
---|---|
To: | emkxp01(at)mtcc(dot)demon(dot)co(dot)uk, maillist(at)candle(dot)pha(dot)pa(dot)us |
Cc: | meskes(at)topsystem(dot)de, hackers(at)postgresql(dot)org |
Subject: | Re: [HACKERS] initdb problems |
Date: | 1998-08-26 16:13:09 |
Message-ID: | 199808261613.RAA01232@mtcc.demon.co.uk |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Bruce Momjian <maillist(at)candle(dot)pha(dot)pa(dot)us>
>
> > Hi All,
> >
> > My problems seem to be getting worse!!
> >
> > Yesterday I was only getting a crash when I tried to create a table.
> >
> > Today, with the latest from cvs I'm getting a crash on a simple select.
> >
> > Here's the backtrace:-
>
> OK, selects should be fixed now. Also
Confirmed, selects are fine, thanks.
>
> select relname, attname,attalign from pg_class, pg_attribute, pg_type
> where atttypid = pg_type.oid and typname = 'name' and pg_class.oid =
> attrelid and attalign != 'd'
>
> now returns no rows, as it should. Some tricky work, but they are all
> correct now. Let's see if that fixes the Sparc problem.
Unfortunately not but... I'm seeing some strange things in gdb.
(apologies again for the wide post :-( )
Attaching to program `/usr/local/pgsql/bin/postmaster', process 5422
Reading symbols from /lib/libdl.so.1.8.3...done.
Reading symbols from /lib/libm.so.5.0.6...done.
Reading symbols from /usr/lib/libreadline.so.2.0...done.
Reading symbols from /lib/libtermcap.so.2.0.8...done.
Reading symbols from /usr/lib/libncurses.so.3.0...done.
Reading symbols from /lib/libc.so.5.3.12...done.
Reading symbols from /lib/ld-linux.so.1...done.
0xe00f59c4 in __read ()
(gdb) break DataFill
Breakpoint 1 at 0x26b34: file heaptuple.c, line 126.
(gdb) cont
Continuing.
Breakpoint 1, DataFill (data=0x1b8438 "", tupleDesc=0x160e30, value=0xefffcdf8,
nulls=0xefffce48 ' ' <repeats 16 times>, "à\034 ", infomask=0x1b8430,
bit=0x0) at heaptuple.c:126
126 bits8 *bitP = 0;
(gdb)
Continuing.
Breakpoint 1, DataFill (data=0x1b1318 "", tupleDesc=0x160a70, value=0xefffccdc,
nulls=0xefffcce0 " \026\0160",
infomask=0xefffca66, bit=0x0) at heaptuple.c:126
126 bits8 *bitP = 0;
(gdb)
Continuing.
Breakpoint 1, DataFill (data=0x160618 "", tupleDesc=0x1607b0, value=0xefffccdc,
nulls=0xefffcce0 " \026\0160",
infomask=0xefffca66, bit=0x0) at heaptuple.c:126
126 bits8 *bitP = 0;
(gdb)
Continuing.
Breakpoint 1, DataFill (data=0x1b1220 "", tupleDesc=0x160610, value=0xefffce14,
nulls=0xefffce18 "",
infomask=0xefffcb9e, bit=0x1b1218 "") at heaptuple.c:126
126 bits8 *bitP = 0;
(gdb) step
130 int numberOfAttributes = tupleDesc->natts;
(gdb)
127 int bitmask = 0;
(gdb)
133 if (bit != NULL)
(gdb)
135 bitP = &bit[-1];
(gdb)
136 bitmask = CSIGNBIT;
(gdb)
141 for (i = 0; i < numberOfAttributes; i++)
(gdb)
143 if (bit != NULL)
(gdb)
145 if (bitmask != CSIGNBIT)
(gdb)
149 bitP += 1;
(gdb)
150 *bitP = 0x0;
(gdb)
151 bitmask = 1;
(gdb)
154 if (nulls[i] == 'n')
(gdb)
160 *bitP |= bitmask;
(gdb)
163 switch (att[i]->attlen)
(gdb) print att[i]->attlen
$1 = 4
(gdb) step
189 *(int32 *) data = (att[i]->attbyval ?
(gdb)
193 break;
(gdb)
141 for (i = 0; i < numberOfAttributes; i++)
(gdb)
143 if (bit != NULL)
(gdb)
145 if (bitmask != CSIGNBIT)
(gdb)
154 if (nulls[i] == 'n')
(gdb)
160 *bitP |= bitmask;
(gdb)
163 switch (att[i]->attlen)
(gdb)
195 if (att[i]->attlen < sizeof(int32))
(gdb) print att[i]->attlen
$2 = 32
(gdb) step
198 if (att[i]->attalign == 'd')
(gdb)
200 data = (char *)
DOUBLEALIGN(data);
(gdb)
201 memmove(data,
DatumGetPointer(value[i]),
(gdb)
204 }
(gdb)
208 memmove(data,
DatumGetPointer(value[i]),
(gdb)
Program received signal SIGSEGV, Segmentation fault.
0xe016e6b4 in _wordcopy_fwd_aligned ()
So the memmove() at line 201 gets executed OK, no SIGSEGV but how do we get
to line 208 and call the memmove() again!!
I'm sure I must be missing the obvious but...
194 default:
195 if (att[i]->attlen < sizeof(int32))
196 elog(ERROR, "DataFill: attribute
%d has len %d",
197 i, att[i]->attlen);
198 if (att[i]->attalign == 'd')
199 {
200 data = (char *)
DOUBLEALIGN(data);
201 memmove(data,
DatumGetPointer(value[i]),
202 att[i]->attlen);
203 data += att[i]->attlen;
204 }
205 else
206 {
207 data = (char *) LONGALIGN(data);
208 memmove(data,
DatumGetPointer(value[i]),
209 att[i]->attlen);
210 data += att[i]->attlen;
211 }
212 break;
Help,
Keith.
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 1998-08-26 16:23:43 | Re: TODO (was: Re: [HACKERS] Problem with parser) |
Previous Message | Bruce Momjian | 1998-08-26 16:11:58 | Re: PostgreSQL under BSD/OS |