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

Reply via email to