[issue1343] panic: vm_map_entry_link, dup addr map
Alex Hornung (via DragonFly issue tracker)
sinknull at crater.dragonflybsd.org
Thu Apr 23 00:45:47 PDT 2009
New submission from Alex Hornung <ahornung at gmail.com>:
The attached test program, when ran with a high argument (100000 or more) causes
this panic.
(gdb) bt
#0 Debugger (msg=0xc056c357 "panic") at ../../platform/pc32/i386/db_interface.c:335
#1 0xc02f455a in panic (fmt=0xc05b8ea8 "vm_map_entry_link: dup addr map %p ent
%p") at ../../kern/kern_shutdown.c:798
#2 0xc04870c0 in _vm_map_clip_end (map=0xc204a1d0, entry=0xd36e6bc0, end=4096,
countp=0xd2baba6c) at ../../vm/vm_map.c:695
#3 0xc0487f57 in vm_map_stack (map=0xc204a1d0, addrbos=4294049792,
max_ssize=1052672, prot=7 '\a', max=7 '\a', cow=0) at ../../vm/vm_map.c:3064
#4 0xc0489bda in vm_mmap (map=0xc204a1d0, addr=0xd2babc88, size=1052672, prot=7
'\a', maxprot=7 '\a', flags=<value optimized out>, handle=0x0, foff=0) at
. ./../vm/vm_mmap.c:1106
#5 0xc048a231 in kern_mmap (vms=0xc204a1d0, uaddr=0xfff20000<error reading
variable>, ulen=1052672, uprot=<value optimized out>, uflags=1024, fd=-1,
upos=0, res=0xd2babcf0)
at ../../vm/vm_mmap.c:404
#6 0xc048a2aa in sys_mmap (uap=0xd2babcf0) at ../../vm/vm_mmap.c:419
#7 0xc05036f1 in syscall2 (frame=0xd2babd40) at
. ./../platform/pc32/i386/trap.c:1357
#8 0xc04f2aa6 in Xint0x80_syscall () at ../../platform/pc32/i386/exception. s:876
#9 0xd2babd40 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
----------
files: readdir.c
keyword: kernel
messages: 6443
nosy: alexh
priority: bug
status: unread
title: panic: vm_map_entry_link, dup addr map
_____________________________________________________
DragonFly issue tracker <bugs at lists.dragonflybsd.org>
<http://bugs.dragonflybsd.org/issue1343>
_____________________________________________________#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
#include <unistd.h>
pthread_barrier_t bar;
void* tester(void *arg)
{
struct dirent *en;
DIR *d = opendir("/");
pthread_barrier_wait(&bar);
while ( (en = readdir(d)) != NULL )
{
if (errno != 0)
{
perror("thread tester error: ");
exit(1);
}
}
if (!en)
{
perror("thread tester error: ");
exit(1);
}
}
void* checker(void *arg)
{
pthread_barrier_wait(&bar);
printf("Passed barrier!\n");
}
int main(int argc, char *argv[])
{
int i, ret, nthreads;
pthread_t th;
if (argc <= 1)
{
printf("Need one argument\n");
exit(1);
}
nthreads = atoi(argv[1]);
printf("Trying with %d threads\n", nthreads);
if ( (ret = pthread_barrier_init(&bar, NULL, nthreads)) != 0)
{
printf("error occured during pthread_barrier_init, ret = %d\n", ret);
perror("Or: ");
exit(1);
}
printf("Creating checker thread\n");
pthread_create(&th, NULL, checker, NULL);
printf("Creating tester threads\n");
for (i = 0; i < nthreads; i++)
pthread_create(&th, NULL, tester, NULL);
for (;;)
{
sleep(1000);
}
return 0;
}
More information about the Bugs
mailing list