Subject: Threading problems
To: None <tech-kern@NetBSD.org>
From: D'Arcy J.M. Cain <darcy@NetBSD.org>
List: tech-kern
Date: 11/23/2004 07:34:48
I am having a problem with PostgreSQL 7.4.6 under NetBSD 2.0 RC5. Here
is the GDB dump:
#0 0x483cafeb in kill () from /usr/lib/libc.so.12
#1 0x483cd0af in __libc_mutex_catchall_stub (m=1212478892)
at /usr/src/lib/libc/thread-stub/thread-stub.c:112
#2 0x4843f0f7 in free (ptr=<incomplete type>)
at /usr/src/lib/libc/stdlib/malloc.c:1149
#3 0x081b3efc in AllocSetDelete (context=<error type>) at aset.c:464
#4 0x081b468a in MemoryContextDelete (context=<error type>) at
#mcxt.c:192
/usr/src/gnu/dist/gdb/gdb/gdbtypes.c:515: gdb-internal-error:
make_cv_type: Assertion `TYPE_OBJFILE (*typeptr) == TYPE_OBJFILE (type)
|| TYPE_STUB (*typeptr)' failed.
An internal GDB error was detected. This may make further
debugging unreliable. Quit this debugging session? (y or n)
First of all, what's with that GDB error? I have never seen it before.
Second, Why am I dying in that code? Here is where it dies.
int
__libc_mutex_catchall_stub(mutex_t *m)
{
/* LINTED deliberate lack of effect */
(void)m;
CHECK_NOT_THREADED();
return (0);
}
The macro is defined as follows:
#define CHECK_NOT_THREADED_ALWAYS() \
do { \
if (__isthreaded) \
DIE(); \
} while (/*CONSTCOND*/0)
#if 1
#define CHECK_NOT_THREADED() CHECK_NOT_THREADED_ALWAYS()
#else
#define CHECK_NOT_THREADED() /* nothing */
#endif
Not being a kernel hacker myself I am not sure exactly what is happening
here but it seems like the app thinks that it is not threaded but the
__isthreaded variable says that it is. I checked and the value is 1 at
the sime it crashes.
This does seem to be a problem only with the current version of
PostgreSQL (7.4.6) and not a slightly older one (7.4.3) but I can't see
how it could be an application fault.
--
D'Arcy J.M. Cain <darcy@NetBSD.org>
http://www.NetBSD.org/