# HG changeset patch # User michaels # Date 1014397947 0 # Node ID 00793f182d30051bc7153da615fc62fa6b9f03b4 # Parent da44ff90109f4d9098713eb82925560323cfbcca [xemacs-hg @ 2002-02-22 17:12:26 by michaels] 2002-02-11 Mike Sperber * device-x.c: (x_IO_error_handler): (x_init_device): Temporarily keep device in static variable `device_being_initialized' so we can recover gracefully from internal XOpenDevice failure. (XOpenDevice is documented to return NULL on failure, but sometimes calls the IO error handler instead.) diff -r da44ff90109f -r 00793f182d30 src/ChangeLog --- a/src/ChangeLog Sat Feb 16 07:25:39 2002 +0000 +++ b/src/ChangeLog Fri Feb 22 17:12:27 2002 +0000 @@ -1,3 +1,13 @@ +2002-02-11 Mike Sperber + + * device-x.c: + (x_IO_error_handler): + (x_init_device): Temporarily keep device in static variable + `device_being_initialized' so we can recover gracefully from + internal XOpenDevice failure. (XOpenDevice is documented to + return NULL on failure, but sometimes calls the IO error handler + instead.) + 2002-02-12 Stephen J. Turnbull * fileio.c (Ffind_file_name_handler): Improve docstring. diff -r da44ff90109f -r 00793f182d30 src/device-x.c --- a/src/device-x.c Sat Feb 16 07:25:39 2002 +0000 +++ b/src/device-x.c Fri Feb 22 17:12:27 2002 +0000 @@ -168,6 +168,8 @@ /* initializing an X connection */ /************************************************************************/ +static struct device *device_being_initialized = NULL; + static void allocate_x_device_struct (struct device *d) { @@ -563,7 +565,9 @@ */ slow_down_interrupts (); /* May not be needed but XtOpenDisplay could not deal with signals here. */ + device_being_initialized = d; dpy = DEVICE_X_DISPLAY (d) = XOpenDisplay (disp_name); + device_being_initialized = NULL; speed_up_interrupts (); if (dpy == 0) @@ -1117,6 +1121,9 @@ Lisp_Object dev; struct device *d = get_device_from_display_1 (disp); + if (!d) + d = device_being_initialized; + assert (d != NULL); XSETDEVICE (dev, d);