F11: xorg decision to disable Ctrl-Alt-Backspace

Callum Lerwick seg at haxxed.com
Sat Apr 4 17:41:56 UTC 2009


On Tue, 2009-03-31 at 10:16 -0400, Adam Jackson wrote: 
> So let's list the cases that zap would actually recover from:
> 
> 1: stuck grabs
> 2: focus reverts to None and your window manager is dead
> 3: X driver that's decided to stop rendering (or stop rendering
> correctly)
> 
> In case 3, you need to blow away the session and there's no getting
> around it.  So VT switch and killall gnome-session will do just fine.
> For case 2, I seem to recall this being an unpleasant requirement of the
> X protocol somewhere along the line; but I'm looking into it.
> 
> For case 1, you might be able to recover if you could just figure out
> which client was being obstreperous.  So clearly the right thing is to
> dump active grab state to the X log on VT switch.  If there's anything
> there, then you know who to blame and you can pkill just that and
> recover.  If there's not, then the session is doomed.
> 
> Something like this perhaps:
> 
> http://ajax.fedorapeople.org/patches/xserver-grab-debugging.patch
> 
> I mean, I know it's bad form to post code to a development list, but I
> hope I can be forgiven this time.

You are honestly expecting Aunt Tillie to log in to a console and grovel
through log files?

Here, how about a real life test case:

#include <stdlib.h>
#include <SDL/SDL.h>

int main(int argc, char *argv[]){
  if ( SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER) < 0 ) {
    fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError());
    exit(1);
  }
  SDL_Surface *screen;
  screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE|SDL_FULLSCREEN);
  if ( screen == NULL ) {
    fprintf(stderr, "Unable to set 640x480 video: %s\n", SDL_GetError());
    exit(1);
  }
  SDL_WM_GrabInput(SDL_GRAB_ON);
  SDL_ShowCursor(SDL_DISABLE);
  SDL_Delay(1000);
  abort();
  return 0;
}

Compile with 'gcc -O2 -Wall -lSDL sdlcrash.c -o sdlcrash'.

Little Billy's game of Quake 3 crashes. How does he recover? What does
Aunt Tille tell him if he asks for help? (This seems to have gotten
better at some point, apparently the GNOME menu learned to stay in the
visible part of the goddamn screen...)

Now how about Seg, the guy who debugs Little Billy's game. Take out the
'SDL_FULLSCREEN' flag from sdlcrash, recompile and run it under gdb.
Wait for the crash... kablooey! I run in to this situation all the
goddamn time trying to debug Second Life. It grabs the mouse when you
click to move the camera, which is what you're doing most of the time.
If it crashes then you're screwed.

Is there some way to recover other than killing off the process, which
screws any chance of debugging it because it's no longer running? Remote
debugging isn't always particularly convenient.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part
Url : http://lists.fedoraproject.org/pipermail/devel/attachments/20090404/af68a26c/attachment.bin 


More information about the devel mailing list