Hi,
DGA doesn't work with the latest libggi. (It worked with older
libggi's as shipped with debian woody).
I've:
GGI_DGA_FBDEV=/dev/fb0current
GGI_DISPLAY=DGA
GGI_DEBUG=1
GGI_DEBUGSYNC=1
# ls -l /dev/fb0current
crw-rw-rw- 1 root tty 29, 0 Jan 28 2000 /dev/fb0current
and I'm still using the ggi of 23.12.2000.
It hangs in
libggi/ggi/dl.c:172
err = dlh->open(vis, dlh, args, argptr, &dlret);
(I stepped until there with the debugger). The debugger prints
just before calling dlh->open():
(gdb) p *vis
$2 = {
version = 65537,
mutex = 0x81db720,
next = 0x0,
flags = 0,
gamma_red = 1,
gamma_green = 1,
gamma_blue = 1,
fd = -1,
d_frame_num = 0,
r_frame_num = 0,
w_frame_num = 0,
origin_x = 0,
origin_y = 0,
numknownext = 0,
needidleaccel = 0,
accelactive = 0,
dummyint = {-1, -1, 0, 136165040, -1, 0},
opdisplay = 0x81dbac0,
opgc = 0x81db730,
opcolor = 0x81d9dc8,
opdraw = 0x81db9d0,
opdummy = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
r_frame = 0x0,
w_frame = 0x0,
gc = 0x40235880,
palette = 0x0,
mode = 0x81d8fc8,
pixfmt = 0x81d9cc0,
input = 0x0,
targetpriv = 0x0,
app_dbs = 0x81d9d98,
priv_dbs = 0x81d9db0,
dlhandle = 0x0,
extlib = 0x0,
extlist = 0x0,
drvpriv = {0x0 <repeats 20 times>},
helperpriv = 0x0,
genericpriv = 0x0,
colorpriv = 0x0
}
(gdb) p *dlh
$4 = {
handle = 0x81dbb50,
name = 0x0,
usecnt = 0,
type = 1,
visual = 0x81db600,
entry = 0x4001d084 <GGIdl_xf86dga>,
open = 0x4001c920 <GGIopen>,
exit = 0,
close = 0x4001d0e4 <GGIclose>
}
(gdb) p args
$5 = 0x0
(gdb) p argptr
$6 = (void *) 0x0
(gdb) p dlret
$7 = 0
stepping over to the line which makes the application hanging
results in (having GGI_DEBUG=1 and GGI_DEBUGSYNC=1):
(gdb) s
LibGGI: display-DGA has display (null).
LibGGI: display-DGA version 2.0
LibGGI: XF86VidMode version 2.0
LibGGI: fb: 0x40364000, stride: 1024, bank_size: 4194304, mem_size: 4096
The X-server won't react any more, I can't interrupt with ctrl-c, the window
manager's accelerators don't work any more, so I can only switch to the console
and kill the application.
Doing an strace on the hanging application and pressing <return> on the
hanging application yields:
select(4, [3], NULL, NULL, NULL) = 1 (in [3])75\1\366\1\275"..., 16777604) = 64
read(3, "\3%\23\0\357\204t\260&\0\0\0&\0\0\0l\0@\0\275\1\366\1\275"..., 16777604) = 64
read(3, 0x40764074, 16777540) = -1 EAGAIN (Resource temporarily unavailable)
select(4, [3], NULL, NULL, NULL) = 1 (in [3])75\1\366\1\275"..., 16777540) = 32
read(3, "\2$\23\0\205\215t\260&\0\0\0&\0\0\0l\0@\0\275\1\366\1\275"..., 16777540) = 32
relect(4, [3], NULL, NULL, NULL) = 1 (in [3])
read(3, "\3$\23\0\345\215t\260&\0\0\0&\0\0\0l\0@\0\275\1\366\1\275"..., 16777508) = 32
read(3, 0x407640b4, 16777476) = -1 EAGAIN (Resource temporarily unavailable)
select(4, [3], NULL, NULL, NULL) = 1 (in [3])
read(3, "\2%\23\0,\220t\260&\0\0\0&\0\0\0l\0@\0\275\1\366\1\275"..., 16777476) = 32
read(3, 0x407640d4, 16777444) = -1 EAGAIN (Resource temporarily unavailable)
select(4, [3], NULL, NULL, NULL) = 1 (in [3])
read(3, "\2@\23\0\237\220t\260&\0\0\0&\0\0\0l\0@\0\275\1\366\1\275"..., 16777444) = 32
read(3, 0x407640f4, 16777412) = -1 EAGAIN (Resource temporarily unavailable)
select(4, [3], NULL, NUL ...
so the select gets triggered apparently even if the application hangs, but the
read fails.
I hope this input helps to 'repair' the broken DGA support.
--
Johannes