2007-11-23 04:55:12

by Timo Sirainen

[permalink] [raw]
Subject: Unkillable gdb process gets system unusably slow

Fully reproducible with me. v2.6.23.1 x86-64 SMP kernel, Core 2 CPU, gdb
v6.6.90.20070912-debian.

gdb ./hang
run
fr 1
p (char*)base

p command hangs and the entire system becomes unusably slow. kill -9
doesn't kill gdb.

/* gcc hang.c -o hang -g -Wall */
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>

int main(void)
{
int fd;
char buf[100];
void *base;

fd = open("hang.tmp", O_RDWR | O_CREAT, 0600);
if (fd == -1) perror("open");

base = mmap(NULL, 100, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
if (base == MAP_FAILED)
perror("mmap");
memcpy(buf, base, sizeof(buf));
return 0;
}


Attachments:
signature.asc (189.00 B)
This is a digitally signed message part

2007-11-23 13:24:04

by Duane Griffin

[permalink] [raw]
Subject: Re: Unkillable gdb process gets system unusably slow

On 23/11/2007, Timo Sirainen <[email protected]> wrote:
> Fully reproducible with me. v2.6.23.1 x86-64 SMP kernel, Core 2 CPU, gdb
> v6.6.90.20070912-debian.

Fixed in 2.6.23.2, see discussion starting here:
http://marc.info/?l=linux-kernel&m=119379156819358&w=2

> gdb ./hang
> run
> fr 1
> p (char*)base
>
> p command hangs and the entire system becomes unusably slow. kill -9
> doesn't kill gdb.
>
> /* gcc hang.c -o hang -g -Wall */
> #include <stdio.h>
> #include <string.h>
> #include <fcntl.h>
> #include <unistd.h>
> #include <sys/mman.h>
>
> int main(void)
> {
> int fd;
> char buf[100];
> void *base;
>
> fd = open("hang.tmp", O_RDWR | O_CREAT, 0600);
> if (fd == -1) perror("open");
>
> base = mmap(NULL, 100, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
> if (base == MAP_FAILED)
> perror("mmap");
> memcpy(buf, base, sizeof(buf));
> return 0;
> }

Cheers,
Duane.

--
"I never could learn to drink that blood and call it wine" - Bob Dylan