diff options
author | Jeff Brown <jeffbrown@google.com> | 2010-09-16 17:04:52 -0700 |
---|---|---|
committer | Jeff Brown <jeffbrown@google.com> | 2010-09-16 17:04:52 -0700 |
commit | f67f29903680e7a33af020dbeb80697ad619b26e (patch) | |
tree | e328da75b7a7a5893ca9267b844f5c7dcbbe84e2 /libs/ui | |
parent | 3435d3bb556a00b55c4160baabd4047935dc07e9 (diff) | |
download | frameworks_native-f67f29903680e7a33af020dbeb80697ad619b26e.zip frameworks_native-f67f29903680e7a33af020dbeb80697ad619b26e.tar.gz frameworks_native-f67f29903680e7a33af020dbeb80697ad619b26e.tar.bz2 |
Ensure input dispatcher and native looper handles EINTR.
Change-Id: I0a42db5f273b9bfe4ab174e4ee65d5d852f9f6bc
Diffstat (limited to 'libs/ui')
-rw-r--r-- | libs/ui/InputTransport.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/libs/ui/InputTransport.cpp b/libs/ui/InputTransport.cpp index 4c402dc..2c6346e 100644 --- a/libs/ui/InputTransport.cpp +++ b/libs/ui/InputTransport.cpp @@ -131,7 +131,10 @@ status_t InputChannel::openInputChannelPair(const String8& name, } status_t InputChannel::sendSignal(char signal) { - ssize_t nWrite = ::write(mSendPipeFd, & signal, 1); + ssize_t nWrite; + do { + nWrite = ::write(mSendPipeFd, & signal, 1); + } while (nWrite == -1 && errno == EINTR); if (nWrite == 1) { #if DEBUG_CHANNEL_SIGNALS @@ -147,7 +150,11 @@ status_t InputChannel::sendSignal(char signal) { } status_t InputChannel::receiveSignal(char* outSignal) { - ssize_t nRead = ::read(mReceivePipeFd, outSignal, 1); + ssize_t nRead; + do { + nRead = ::read(mReceivePipeFd, outSignal, 1); + } while (nRead == -1 && errno == EINTR); + if (nRead == 1) { #if DEBUG_CHANNEL_SIGNALS LOGD("channel '%s' ~ received signal '%c'", mName.string(), *outSignal); |