Remove SIGIO support for input [v5]

This removes all of the SIGIO handling support used for input
throughout the X server, preparing the way for using threads for input
handling instead.

Places calling OsBlockSIGIO and OsReleaseSIGIO are marked with calls
to stub functions input_lock/input_unlock so that we don't lose this
information.

xfree86 SIGIO support is reworked to use internal versions of
OsBlockSIGIO and OsReleaseSIGIO.

v2: Don't change locking order (Peter Hutterer)
v3: Comment weird && FALSE in xf86Helper.c
    Leave errno save/restore in xf86ReadInput
    Squash with stub adding patch (Peter Hutterer)
v4: Leave UseSIGIO config parameter so that
    existing config files don't break (Peter Hutterer)
v5: Split a couple of independent patch bits out
    of kinput.c (Peter Hutterer)

Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Keith Packard
2015-12-08 14:39:46 -08:00
parent 8cf832c288
commit 6a5a4e6037
28 changed files with 115 additions and 456 deletions

View File

@@ -493,14 +493,14 @@ DisableDevice(DeviceIntPtr dev, BOOL sendevent)
FreeSprite(dev);
/* now that the device is disabled, we can reset the signal handler's
/* now that the device is disabled, we can reset the event reader's
* last.slave */
OsBlockSignals();
input_lock();
for (other = inputInfo.devices; other; other = other->next) {
if (other->last.slave == dev)
other->last.slave = NULL;
}
OsReleaseSignals();
input_unlock();
LeaveWindow(dev);
SetFocusOut(dev);
@@ -1033,7 +1033,7 @@ CloseDownDevices(void)
{
DeviceIntPtr dev;
OsBlockSignals();
input_lock();
/* Float all SDs before closing them. Note that at this point resources
* (e.g. cursors) have been freed already, so we can't just call
@@ -1060,7 +1060,7 @@ CloseDownDevices(void)
XkbDeleteRulesDflts();
XkbDeleteRulesUsed();
OsReleaseSignals();
input_unlock();
}
/**

View File

@@ -165,7 +165,7 @@ AccelerationDefaultCleanup(DeviceIntPtr dev)
* AccelSchemeProc(), but that seems impossible. Schemes don't get
* switched often anyway.
*/
OsBlockSignals();
input_lock();
dev->valuator->accelScheme.AccelSchemeProc = NULL;
FreeVelocityData(vel);
free(vel);
@@ -175,7 +175,7 @@ AccelerationDefaultCleanup(DeviceIntPtr dev)
accelData);
free(dev->valuator->accelScheme.accelData);
dev->valuator->accelScheme.accelData = NULL;
OsReleaseSignals();
input_unlock();
}
}

View File

@@ -79,7 +79,7 @@ TouchResizeQueue(ClientPtr client, void *closure)
{
int i;
OsBlockSignals();
input_lock();
/* first two ids are reserved */
for (i = 2; i < MAXDEVICES; i++) {
@@ -112,7 +112,7 @@ TouchResizeQueue(ClientPtr client, void *closure)
}
}
OsReleaseSignals();
input_unlock();
return TRUE;
}
@@ -1077,7 +1077,7 @@ TouchEndPhysicallyActiveTouches(DeviceIntPtr dev)
InternalEvent *eventlist = InitEventList(GetMaximumEventsNum());
int i;
OsBlockSignals();
input_lock();
mieqProcessInputEvents();
for (i = 0; i < dev->last.num_touches; i++) {
DDXTouchPointInfoPtr ddxti = dev->last.touches + i;
@@ -1091,7 +1091,7 @@ TouchEndPhysicallyActiveTouches(DeviceIntPtr dev)
mieqProcessDeviceEvent(dev, eventlist + j, NULL);
}
}
OsReleaseSignals();
input_unlock();
FreeEventList(eventlist, GetMaximumEventsNum());
}