summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTiago Vignatti <tiago.vignatti@nokia.com>2010-09-28 18:17:01 +0300
committerTiago Vignatti <tiago.vignatti@nokia.com>2010-09-28 18:22:10 +0300
commit65b40a2efe2023e2604de1f737979b0aa23f4e89 (patch)
treee58b21b872bb1c80e35338e3fde70c4c425a27ad
parenta6f61ec357629fe9867451a3c757ad8940e0864a (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.h2
-rw-r--r--os/WaitFor.c1
-rw-r--r--os/inputthread.c18
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;