tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: radiusd: Error detected by libpthread: Invalid mutex.
In article <kme4p5$mu1$1%ger.gmane.org@localhost>,
Christos Zoulas <christos%astron.com@localhost> wrote:
>In article <20130508165743.GC21387%trav.math.uni-bonn.de@localhost>,
>Edgar Fuß <ef%math.uni-bonn.de@localhost> wrote:
>>> It is prolly a radiusd bug:
>>And I probably need some help here.
>>
>>> $ PTHREAD_DIAGASSERT=a radiusd
>>> $ gdb radiusd radiusd.core
>>> (gdb) where
>>I don't get a core (with allow_core_dumps = yes in radiusd.conf).
>>
>>I tried gdb with follow-fork-mode set to child and a breakpoint on
>>pthread__errorfunc, but I get
>>
>> /usr/src/external/gpl3/gdb/dist/gdb/infrun.c:3036: internal-error:
>>handle_inferior_event: Assertion `inf' failed.
>> A problem internal to GDB has been detected,
>> further debugging may prove unreliable.
>>
>>So I'm having a pretty hard time finding out who is calling
>>pthread_mutex_lock()
>>with a non-initialized mutex.
>>
>>This is on a pretty recent (few days old) 6 (i.e. 6.1_RC4).
Otoh, this seems to say that mutexes work across fork.
#include <sys/wait.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <err.h>
#include <errno.h>
int
main(int argc, char *argv[])
{
pthread_mutex_t mt;
int status;
pthread_mutex_init(&mt, NULL);
switch (fork()) {
case -1:
err(EXIT_FAILURE, "fork");
case 0:
if ((errno = pthread_mutex_lock(&mt)) == 0)
errx(EXIT_FAILURE, "no error from forked mutex");
else
err(EXIT_SUCCESS, "ok, expected error");
default:
if (wait(&status) == -1)
err(EXIT_FAILURE, "wait");
return WEXITSTATUS(status);
}
}
Home |
Main Index |
Thread Index |
Old Index