diff options
author | Elliott Hughes <enh@google.com> | 2014-05-21 18:47:50 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2014-05-21 18:47:50 -0700 |
commit | e348c5b72ad889389c7c1c900c121f0fbee221b5 (patch) | |
tree | 9c77581ad7520309c0bb90f11bba766a6cd61b28 | |
parent | 9382378b6b271949bdce527ea3da748c13c4c692 (diff) | |
parent | c0bf836f8a4e34d66c10a2bb8b8cee0db04790cc (diff) | |
download | frameworks_av-e348c5b72ad889389c7c1c900c121f0fbee221b5.zip frameworks_av-e348c5b72ad889389c7c1c900c121f0fbee221b5.tar.gz frameworks_av-e348c5b72ad889389c7c1c900c121f0fbee221b5.tar.bz2 |
resolved conflicts for merge of c0bf836f to master
Change-Id: I5cf238fa56d6fff443b212870cf9dd7f1110e7da
-rw-r--r-- | media/libmedia/AudioTrackShared.cpp | 62 | ||||
-rw-r--r-- | services/audioflinger/FastMixer.h | 8 | ||||
-rw-r--r-- | services/audioflinger/FastThread.cpp | 7 | ||||
-rw-r--r-- | services/audioflinger/Threads.cpp | 4 | ||||
-rw-r--r-- | services/audioflinger/Tracks.cpp | 5 |
5 files changed, 42 insertions, 44 deletions
diff --git a/media/libmedia/AudioTrackShared.cpp b/media/libmedia/AudioTrackShared.cpp index ebf667a..219dbfd 100644 --- a/media/libmedia/AudioTrackShared.cpp +++ b/media/libmedia/AudioTrackShared.cpp @@ -19,9 +19,9 @@ #include <private/media/AudioTrackShared.h> #include <utils/Log.h> -extern "C" { -#include "../private/bionic_futex.h" -} + +#include <linux/futex.h> +#include <sys/syscall.h> namespace android { @@ -206,12 +206,12 @@ status_t ClientProxy::obtainBuffer(Buffer* buffer, const struct timespec *reques } int32_t old = android_atomic_and(~CBLK_FUTEX_WAKE, &cblk->mFutex); if (!(old & CBLK_FUTEX_WAKE)) { - int rc; if (measure && !beforeIsValid) { clock_gettime(CLOCK_MONOTONIC, &before); beforeIsValid = true; } - int ret = __futex_syscall4(&cblk->mFutex, + errno = 0; + (void) syscall(__NR_futex, &cblk->mFutex, mClientInServer ? FUTEX_WAIT_PRIVATE : FUTEX_WAIT, old & ~CBLK_FUTEX_WAKE, ts); // update total elapsed time spent waiting if (measure) { @@ -230,16 +230,16 @@ status_t ClientProxy::obtainBuffer(Buffer* buffer, const struct timespec *reques before = after; beforeIsValid = true; } - switch (ret) { - case 0: // normal wakeup by server, or by binderDied() - case -EWOULDBLOCK: // benign race condition with server - case -EINTR: // wait was interrupted by signal or other spurious wakeup - case -ETIMEDOUT: // time-out expired + switch (errno) { + case 0: // normal wakeup by server, or by binderDied() + case EWOULDBLOCK: // benign race condition with server + case EINTR: // wait was interrupted by signal or other spurious wakeup + case ETIMEDOUT: // time-out expired // FIXME these error/non-0 status are being dropped break; default: - ALOGE("%s unexpected error %d", __func__, ret); - status = -ret; + status = errno; + ALOGE("%s unexpected error %s", __func__, strerror(status)); goto end; } } @@ -295,8 +295,8 @@ void ClientProxy::binderDied() audio_track_cblk_t* cblk = mCblk; if (!(android_atomic_or(CBLK_INVALID, &cblk->mFlags) & CBLK_INVALID)) { // it seems that a FUTEX_WAKE_PRIVATE will not wake a FUTEX_WAIT, even within same process - (void) __futex_syscall4(&cblk->mFutex, mClientInServer ? FUTEX_WAKE_PRIVATE : FUTEX_WAKE, - 1, NULL); + (void) syscall(__NR_futex, &cblk->mFutex, mClientInServer ? FUTEX_WAKE_PRIVATE : FUTEX_WAKE, + 1); } } @@ -304,8 +304,8 @@ void ClientProxy::interrupt() { audio_track_cblk_t* cblk = mCblk; if (!(android_atomic_or(CBLK_INTERRUPT, &cblk->mFlags) & CBLK_INTERRUPT)) { - (void) __futex_syscall4(&cblk->mFutex, mClientInServer ? FUTEX_WAKE_PRIVATE : FUTEX_WAKE, - 1, NULL); + (void) syscall(__NR_futex, &cblk->mFutex, mClientInServer ? FUTEX_WAKE_PRIVATE : FUTEX_WAKE, + 1); } } @@ -435,18 +435,18 @@ status_t AudioTrackClientProxy::waitStreamEndDone(const struct timespec *request } int32_t old = android_atomic_and(~CBLK_FUTEX_WAKE, &cblk->mFutex); if (!(old & CBLK_FUTEX_WAKE)) { - int rc; - int ret = __futex_syscall4(&cblk->mFutex, + errno = 0; + (void) syscall(__NR_futex, &cblk->mFutex, mClientInServer ? FUTEX_WAIT_PRIVATE : FUTEX_WAIT, old & ~CBLK_FUTEX_WAKE, ts); - switch (ret) { - case 0: // normal wakeup by server, or by binderDied() - case -EWOULDBLOCK: // benign race condition with server - case -EINTR: // wait was interrupted by signal or other spurious wakeup - case -ETIMEDOUT: // time-out expired + switch (errno) { + case 0: // normal wakeup by server, or by binderDied() + case EWOULDBLOCK: // benign race condition with server + case EINTR: // wait was interrupted by signal or other spurious wakeup + case ETIMEDOUT: // time-out expired break; default: - ALOGE("%s unexpected error %d", __func__, ret); - status = -ret; + status = errno; + ALOGE("%s unexpected error %s", __func__, strerror(status)); goto end; } } @@ -535,8 +535,8 @@ status_t ServerProxy::obtainBuffer(Buffer* buffer, bool ackFlush) if (front != rear) { int32_t old = android_atomic_or(CBLK_FUTEX_WAKE, &cblk->mFutex); if (!(old & CBLK_FUTEX_WAKE)) { - (void) __futex_syscall4(&cblk->mFutex, - mClientInServer ? FUTEX_WAKE_PRIVATE : FUTEX_WAKE, 1, NULL); + (void) syscall(__NR_futex, &cblk->mFutex, + mClientInServer ? FUTEX_WAKE_PRIVATE : FUTEX_WAKE, 1); } } front = rear; @@ -638,8 +638,8 @@ void ServerProxy::releaseBuffer(Buffer* buffer) ALOGV("mAvailToClient=%u stepCount=%u minimum=%u", mAvailToClient, stepCount, minimum); int32_t old = android_atomic_or(CBLK_FUTEX_WAKE, &cblk->mFutex); if (!(old & CBLK_FUTEX_WAKE)) { - (void) __futex_syscall4(&cblk->mFutex, - mClientInServer ? FUTEX_WAKE_PRIVATE : FUTEX_WAKE, 1, NULL); + (void) syscall(__NR_futex, &cblk->mFutex, + mClientInServer ? FUTEX_WAKE_PRIVATE : FUTEX_WAKE, 1); } } @@ -683,8 +683,8 @@ bool AudioTrackServerProxy::setStreamEndDone() { bool old = (android_atomic_or(CBLK_STREAM_END_DONE, &cblk->mFlags) & CBLK_STREAM_END_DONE) != 0; if (!old) { - (void) __futex_syscall4(&cblk->mFutex, mClientInServer ? FUTEX_WAKE_PRIVATE : FUTEX_WAKE, - 1, NULL); + (void) syscall(__NR_futex, &cblk->mFutex, mClientInServer ? FUTEX_WAKE_PRIVATE : FUTEX_WAKE, + 1); } return old; } diff --git a/services/audioflinger/FastMixer.h b/services/audioflinger/FastMixer.h index 981c1a7..db89ef4 100644 --- a/services/audioflinger/FastMixer.h +++ b/services/audioflinger/FastMixer.h @@ -17,13 +17,11 @@ #ifndef ANDROID_AUDIO_FAST_MIXER_H #define ANDROID_AUDIO_FAST_MIXER_H +#include <linux/futex.h> +#include <sys/syscall.h> #include <utils/Debug.h> -#if 1 // FIXME move to where used -extern "C" { -#include "../private/bionic_futex.h" -} -#endif #include "FastThread.h" +#include <utils/Thread.h> #include "StateQueue.h" #include "FastMixerState.h" #include "FastMixerDumpState.h" diff --git a/services/audioflinger/FastThread.cpp b/services/audioflinger/FastThread.cpp index 8a216b3..216dace 100644 --- a/services/audioflinger/FastThread.cpp +++ b/services/audioflinger/FastThread.cpp @@ -20,10 +20,9 @@ #define ATRACE_TAG ATRACE_TAG_AUDIO #include "Configuration.h" +#include <linux/futex.h> +#include <sys/syscall.h> #include <utils/Log.h> -extern "C" { -#include "../private/bionic_futex.h" -} #include <utils/Trace.h> #include "FastThread.h" @@ -157,7 +156,7 @@ bool FastThread::threadLoop() ALOG_ASSERT(coldFutexAddr != NULL); int32_t old = android_atomic_dec(coldFutexAddr); if (old <= 0) { - __futex_syscall4(coldFutexAddr, FUTEX_WAIT_PRIVATE, old - 1, NULL); + syscall(__NR_futex, coldFutexAddr, FUTEX_WAIT_PRIVATE, old - 1, NULL); } int policy = sched_getscheduler(0); if (!(policy == SCHED_FIFO || policy == SCHED_RR)) { diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp index cfae54e..cdc9a19 100644 --- a/services/audioflinger/Threads.cpp +++ b/services/audioflinger/Threads.cpp @@ -2752,7 +2752,7 @@ AudioFlinger::MixerThread::~MixerThread() if (state->mCommand == FastMixerState::COLD_IDLE) { int32_t old = android_atomic_inc(&mFastMixerFutex); if (old == -1) { - (void) __futex_syscall4(&mFastMixerFutex, FUTEX_WAKE_PRIVATE, 1, NULL); + (void) syscall(__NR_futex, &mFastMixerFutex, FUTEX_WAKE_PRIVATE, 1); } } state->mCommand = FastMixerState::EXIT; @@ -2809,7 +2809,7 @@ ssize_t AudioFlinger::MixerThread::threadLoop_write() if (state->mCommand == FastMixerState::COLD_IDLE) { int32_t old = android_atomic_inc(&mFastMixerFutex); if (old == -1) { - (void) __futex_syscall4(&mFastMixerFutex, FUTEX_WAKE_PRIVATE, 1, NULL); + (void) syscall(__NR_futex, &mFastMixerFutex, FUTEX_WAKE_PRIVATE, 1); } #ifdef AUDIO_WATCHDOG if (mAudioWatchdog != 0) { diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp index 68b86f4..f698fa2 100644 --- a/services/audioflinger/Tracks.cpp +++ b/services/audioflinger/Tracks.cpp @@ -21,6 +21,7 @@ #include "Configuration.h" #include <math.h> +#include <sys/syscall.h> #include <utils/Log.h> #include <private/media/AudioTrackShared.h> @@ -1008,7 +1009,7 @@ void AudioFlinger::PlaybackThread::Track::invalidate() android_atomic_or(CBLK_INVALID, &cblk->mFlags); android_atomic_release_store(0x40000000, &cblk->mFutex); // client is not in server, so FUTEX_WAKE is needed instead of FUTEX_WAKE_PRIVATE - (void) __futex_syscall4(&cblk->mFutex, FUTEX_WAKE, INT_MAX, NULL); + (void) syscall(__NR_futex, &cblk->mFutex, FUTEX_WAKE, INT_MAX); mIsInvalid = true; } @@ -1937,7 +1938,7 @@ void AudioFlinger::RecordThread::RecordTrack::invalidate() android_atomic_or(CBLK_INVALID, &cblk->mFlags); android_atomic_release_store(0x40000000, &cblk->mFutex); // client is not in server, so FUTEX_WAKE is needed instead of FUTEX_WAKE_PRIVATE - (void) __futex_syscall4(&cblk->mFutex, FUTEX_WAKE, INT_MAX, NULL); + (void) syscall(__NR_futex, &cblk->mFutex, FUTEX_WAKE, INT_MAX); } |