1
0
mirror of https://github.com/Interlisp/maiko.git synced 2026-01-13 23:27:12 +00:00

Lock X updates for all systems and lock around X cleanup at exit (#391)

* Lock X updates for all systems and lock around X cleanup at exit

All systems which could generate I/O interrupts on the X file descriptor need
to have locking enabled, or there is a high probability that the X library
will deadlock. This requirement may be removed in the future with restructuring
of the way that the interrupt driven I/O is handled.

Ensure that the appropriate XLOCK/XUNLOCK is done around the X window
closing code.

* Also lock X updates when building with CMake.
This commit is contained in:
Nick Briggs 2021-08-26 16:29:10 -07:00 committed by GitHub
parent 934a86fbb5
commit e957e331c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 23 additions and 21 deletions

View File

@ -30,7 +30,7 @@ OPTION(MAIKO_DISPLAY_X11 "Use X11 for display." ON)
IF(MAIKO_DISPLAY_X11)
FIND_PACKAGE(X11 REQUIRED)
SET(MAIKO_DISPLAY_X11_DEFINITIONS
"-DXWINDOW"
"-DXWINDOW -DLOCK_X_UPDATES"
)
SET(MAIKO_DISPLAY_X11_LIBRARIES X11::X11)
SET(MAIKO_DISPLAY_X11_SRCS

View File

@ -14,7 +14,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
XFLAGS = -DXWINDOW -DLOCK_X_UPDATES
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3

View File

@ -13,7 +13,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -I/opt/X11/include -DXWINDOW
XFLAGS = -I/opt/X11/include -DXWINDOW -DLOCK_X_UPDATES
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g

View File

@ -13,7 +13,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -I/opt/X11/include -DXWINDOW
XFLAGS = -I/opt/X11/include -DXWINDOW -DLOCK_X_UPDATES
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2

View File

@ -13,7 +13,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -I/usr/X11/include -DXWINDOW
XFLAGS = -I/usr/X11/include -DXWINDOW -DLOCK_X_UPDATES
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g

View File

@ -13,7 +13,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -I/opt/X11/include -DXWINDOW
XFLAGS = -I/opt/X11/include -DXWINDOW -DLOCK_X_UPDATES
# OPTFLAGS is normally -O2.
OPTFLAGS = -O1 -g

View File

@ -13,7 +13,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -I/opt/X11/include -DXWINDOW
XFLAGS = -I/opt/X11/include -DXWINDOW -DLOCK_X_UPDATES
# OPTFLAGS is normally -O2, for INIT we want unoptimized in case we need to debug it
OPTFLAGS = -O0 -g

View File

@ -13,7 +13,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -I/opt/X11/include -DXWINDOW
XFLAGS = -I/opt/X11/include -DXWINDOW -DLOCK_X_UPDATES
# OPTFLAGS is normally -O2.
OPTFLAGS = -O0 -g3

View File

@ -13,7 +13,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -I/opt/X11/include -DXWINDOW
XFLAGS = -I/opt/X11/include -DXWINDOW -DLOCK_X_UPDATES
# OPTFLAGS is normally -O2.
OPTFLAGS = -O0 -g

View File

@ -14,7 +14,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
XFLAGS = -DXWINDOW -DLOCK_X_UPDATES
# OPTFLAGS is normally -O2, for INIT we want unoptimized in case we need to debug it
OPTFLAGS = -O0 -g

View File

@ -30,7 +30,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xrdopt.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
XFLAGS = -DXWINDOW -DLOCK_X_UPDATES
# OPTFLAGS is normally -g for MAKEINIT, as it needs debugging often.
OPTFLAGS = -g3 -O0

View File

@ -13,7 +13,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
XFLAGS = -DXWINDOW -DLOCK_X_UPDATES
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3

View File

@ -13,7 +13,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xrdopt.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
XFLAGS = -DXWINDOW -DLOCK_X_UPDATES
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3

View File

@ -13,7 +13,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xrdopt.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
XFLAGS = -DXWINDOW -DLOCK_X_UPDATES
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3

View File

@ -14,7 +14,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
XFLAGS = -DXWINDOW -DLOCK_X_UPDATES
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3

View File

@ -13,7 +13,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -I/usr/X11R6/include -DXWINDOW
XFLAGS = -I/usr/X11R6/include -DXWINDOW -DLOCK_X_UPDATES
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3

View File

@ -22,7 +22,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xrdopt.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
XFLAGS = -DXWINDOW -DLOCK_X_UPDATES
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g

View File

@ -22,7 +22,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xrdopt.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
XFLAGS = -DXWINDOW -DLOCK_X_UPDATES
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3

View File

@ -29,7 +29,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xrdopt.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
XFLAGS = -DXWINDOW -DLOCK_X_UPDATES
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g3

View File

@ -22,7 +22,7 @@ XFILES = $(OBJECTDIR)xmkicon.o \
$(OBJECTDIR)xrdopt.o \
$(OBJECTDIR)xwinman.o
XFLAGS = -DXWINDOW
XFLAGS = -DXWINDOW -DLOCK_X_UPDATES
# OPTFLAGS is normally -O2.
OPTFLAGS = -O2 -g

View File

@ -108,13 +108,15 @@ void lisp_Xexit(DspInterface dsp)
{
assert(Lisp_Xinitialized);
#if defined(OS5) && defined(I_SETSIG)
#if defined(I_SETSIG)
ioctl(ConnectionNumber(dsp->display_id), I_SETSIG, 0); /* so no interrupts happen during */
#endif
XLOCK;
XDestroySubwindows(dsp->display_id, dsp->LispWindow);
XDestroyWindow(dsp->display_id, dsp->LispWindow);
XCloseDisplay(dsp->display_id);
XUNLOCK(dsp);
Lisp_Xinitialized = false;
} /* end lisp_Xexit */