Add another ATI fglrx workaround to kompmgr

This one restarts kompmgr if the connection to the X display is lost


git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1251019 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
v3.5.13-sru
tpearson 13 years ago
parent a847ac79a0
commit 4e660380ca

@ -182,6 +182,8 @@ typedef struct _fade {
struct sigaction usr_action; struct sigaction usr_action;
sigset_t block_mask; sigset_t block_mask;
int my_exit_code = 3;
win *list; win *list;
fade *fades; fade *fades;
Display *dpy; Display *dpy;
@ -380,6 +382,16 @@ void delete_pid_file()
free(filename); free(filename);
filename = NULL; filename = NULL;
#endif #endif
#if WORK_AROUND_FGLRX
if (my_exit_code == 3) {
sleep(1);
char me[2048];
readlink("/proc/self/exe", me, sizeof(me));
me[2047] = 0;
execl(me, NULL);
}
#endif
} }
void handle_siguser (int sig) void handle_siguser (int sig)
@ -387,6 +399,7 @@ void handle_siguser (int sig)
int uidnum; int uidnum;
if (sig == SIGTERM) { if (sig == SIGTERM) {
delete_pid_file(); delete_pid_file();
my_exit_code=0;
exit(0); exit(0);
return; return;
} }
@ -404,7 +417,9 @@ void handle_siguser (int sig)
printf("Setting kompmgr process uid to %d...\n\r", uidnum); fflush(stdout); printf("Setting kompmgr process uid to %d...\n\r", uidnum); fflush(stdout);
#endif #endif
my_exit_code=4;
delete_pid_file(); delete_pid_file();
my_exit_code=3;
setuid(uidnum); setuid(uidnum);
write_pid_file(getpid()); write_pid_file(getpid());
@ -2680,7 +2695,8 @@ error (Display *dpy, XErrorEvent *ev)
ev->minor_code == X_CompositeRedirectSubwindows) ev->minor_code == X_CompositeRedirectSubwindows)
{ {
fprintf (stderr, "Another composite manager is already running\n"); fprintf (stderr, "Another composite manager is already running\n");
exit (1); my_exit_code=2;
exit (2);
} }
o = ev->error_code - xfixes_error; o = ev->error_code - xfixes_error;
@ -3040,7 +3056,8 @@ usage (char *program)
fprintf (stderr, " -x [0x]XXXXXX\n Choose Custom Color in hex format\n"); fprintf (stderr, " -x [0x]XXXXXX\n Choose Custom Color in hex format\n");
fprintf (stderr, " -v\n Print version Number and exit\n"); fprintf (stderr, " -v\n Print version Number and exit\n");
fprintf (stderr, " -h\n Print this help\n"); fprintf (stderr, " -h\n Print this help\n");
exit (1); my_exit_code=2;
exit (2);
} }
static Bool static Bool
@ -3221,7 +3238,7 @@ main (int argc, char **argv)
} }
setShadowColor(optarg); setShadowColor(optarg);
break; break;
case 'v': fprintf (stderr, "%s v%-3.2f\n", argv[0], _VERSION_); exit (0); case 'v': fprintf (stderr, "%s v%-3.2f\n", argv[0], _VERSION_); my_exit_code=0; exit (0);
case 'h': case 'h':
default: default:
usage (argv[0]); usage (argv[0]);
@ -3238,7 +3255,8 @@ main (int argc, char **argv)
if (!dpy) if (!dpy)
{ {
fprintf (stderr, "Can't open display\n"); fprintf (stderr, "Can't open display\n");
exit (1); my_exit_code=2;
exit (2);
} }
XSetErrorHandler (error); XSetErrorHandler (error);
if (synchronize) if (synchronize)
@ -3249,13 +3267,15 @@ main (int argc, char **argv)
if (!XRenderQueryExtension (dpy, &render_event, &render_error)) if (!XRenderQueryExtension (dpy, &render_event, &render_error))
{ {
fprintf (stderr, "No render extension\n"); fprintf (stderr, "No render extension\n");
exit (1); my_exit_code=2;
exit (2);
} }
if (!XQueryExtension (dpy, COMPOSITE_NAME, &composite_opcode, if (!XQueryExtension (dpy, COMPOSITE_NAME, &composite_opcode,
&composite_event, &composite_error)) &composite_event, &composite_error))
{ {
fprintf (stderr, "No composite extension\n"); fprintf (stderr, "No composite extension\n");
exit (1); my_exit_code=2;
exit (2);
} }
XCompositeQueryVersion (dpy, &composite_major, &composite_minor); XCompositeQueryVersion (dpy, &composite_major, &composite_minor);
#if HAS_NAME_WINDOW_PIXMAP #if HAS_NAME_WINDOW_PIXMAP
@ -3266,17 +3286,20 @@ main (int argc, char **argv)
if (!XDamageQueryExtension (dpy, &damage_event, &damage_error)) if (!XDamageQueryExtension (dpy, &damage_event, &damage_error))
{ {
fprintf (stderr, "No damage extension\n"); fprintf (stderr, "No damage extension\n");
exit (1); my_exit_code=2;
exit (2);
} }
if (!XFixesQueryExtension (dpy, &xfixes_event, &xfixes_error)) if (!XFixesQueryExtension (dpy, &xfixes_event, &xfixes_error))
{ {
fprintf (stderr, "No XFixes extension\n"); fprintf (stderr, "No XFixes extension\n");
exit (1); my_exit_code=2;
exit (2);
} }
if (!XShapeQueryExtension (dpy, &xshape_event, &xshape_error)) if (!XShapeQueryExtension (dpy, &xshape_event, &xshape_error))
{ {
fprintf (stderr, "No XShape extension\n"); fprintf (stderr, "No XShape extension\n");
exit (1); my_exit_code=2;
exit (2);
} }
fprintf(stderr, "Started\n"); fprintf(stderr, "Started\n");
@ -3284,7 +3307,8 @@ main (int argc, char **argv)
register_cm(); register_cm();
if (!register_cm()) if (!register_cm())
{ {
exit (1); my_exit_code=2;
exit (2);
} }
/* get atoms */ /* get atoms */
@ -3327,12 +3351,14 @@ main (int argc, char **argv)
fill_color_name, &c)) fill_color_name, &c))
{ {
fprintf (stderr, "Could not parse fill color.\n"); fprintf (stderr, "Could not parse fill color.\n");
exit (1); my_exit_code=2;
exit (2);
} }
if (! XAllocColor (dpy, DefaultColormap (dpy, scr), &c)) if (! XAllocColor (dpy, DefaultColormap (dpy, scr), &c))
{ {
fprintf (stderr, "Could not allocate color.\n"); fprintf (stderr, "Could not allocate color.\n");
exit (1); my_exit_code=2;
exit (2);
} }
fill_color.red = c.red; fill_color.red = c.red;

Loading…
Cancel
Save