diff options
author | Tiago Vignatti <tiago.vignatti@nokia.com> | 2010-09-28 18:17:01 +0300 |
---|---|---|
committer | Tiago Vignatti <tiago.vignatti@nokia.com> | 2010-09-28 18:22:10 +0300 |
commit | 65b40a2efe2023e2604de1f737979b0aa23f4e89 (patch) | |
tree | e58b21b872bb1c80e35338e3fde70c4c425a27ad | |
parent | a6f61ec357629fe9867451a3c757ad8940e0864a (diff) |
inputthread: use a WakeupHandler to pick up events on the input pipeinputthread-commits
Otherwise you're slowing down every run through the dispatch loop by a
syscall.
Reported-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Tiago Vignatti <tiago.vignatti@nokia.com>
-rw-r--r-- | include/inputthread.h | 2 | ||||
-rw-r--r-- | os/WaitFor.c | 1 | ||||
-rw-r--r-- | os/inputthread.c | 18 |
3 files changed, 11 insertions, 10 deletions
diff --git a/include/inputthread.h b/include/inputthread.h index 6b0bfb541..bf90f85b8 100644 --- a/include/inputthread.h +++ b/include/inputthread.h @@ -34,5 +34,3 @@ extern int InputThreadRegisterDev(int fd, void *readInputArgs); extern int InputThreadUnregisterDev(int fd); - -extern int InputThreadDrainPipe(void); diff --git a/os/WaitFor.c b/os/WaitFor.c index 779c470bb..e66300490 100644 --- a/os/WaitFor.c +++ b/os/WaitFor.c @@ -226,7 +226,6 @@ WaitForSomething(int *pClientsReady) } else { - InputThreadDrainPipe(); i = Select (MaxClients, &LastSelectMask, NULL, NULL, wt); } selecterr = GetErrno(); diff --git a/os/inputthread.c b/os/inputthread.c index 7095c3bcc..2ff8f27de 100644 --- a/os/inputthread.c +++ b/os/inputthread.c @@ -73,7 +73,6 @@ static int hotplugPipeWrite = -1; * events. * * @see WaitForSomething() - * @see InputThreadDrainPipe() */ static void InputThreadFillPipe(int writeHead) @@ -121,12 +120,6 @@ InputThreadReadPipe(int readHead) return 1; } -int -InputThreadDrainPipe(void) -{ - return InputThreadReadPipe(inputThreadInfo->readPipe); -} - /** * Register an input device in the threaded input facility * @@ -262,6 +255,12 @@ InputThreadDoWork(void *arg) } } +static void +InputThreadWakeup(pointer blockData, int err, pointer pReadmask) +{ + InputThreadReadPipe(inputThreadInfo->readPipe); +} + /** * Pre-initialize the facility used for threaded generation of input events * @@ -292,6 +291,9 @@ InputThreadPreInit(void) inputThreadInfo->readPipe = fds[0]; fcntl(inputThreadInfo->readPipe, F_SETFL, O_NONBLOCK | O_CLOEXEC); AddGeneralSocket(inputThreadInfo->readPipe); + RegisterBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA, + InputThreadWakeup, NULL); + inputThreadInfo->writePipe = fds[1]; hotplugPipeRead = hotplugPipe[0]; @@ -356,6 +358,8 @@ InputThreadFini(void) FD_ZERO(&inputThreadInfo->fds); RemoveGeneralSocket(inputThreadInfo->readPipe); + RemoveBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA, + InputThreadWakeup, NULL); close(inputThreadInfo->readPipe); close(inputThreadInfo->writePipe); inputThreadInfo->readPipe = -1; |