Eleven - Thank you for your post.
I could not figure out from your post what your exact code change is.
Can you please upload your CL to AOSP?
See https://source.android.com/source/submit-patches.html
It will be easier to review there.
Thanks

On Monday, October 13, 2014 10:35:01 PM UTC-7, eleven xiang wrote:
>
> Dear All,
>
> firstly, I am sorry to trouble you for a Andriod Audio issue.
>
> in AudioTrackShared.cpp, for a recording case, we met below issue:
>
> recording case met overrun, so the inputThread will sleep a while, but 
> AudioRecrodThread will continue to run and block at mCblk->mFutex.
> if right now, user stop the recording, and the inputThread has no chance 
> to release mFutext, then to standby.
>
> And the client's interrupt was just called right before 
> AudioRecordThread's obtainBbuffer try to wait mCblk->mFutex.
> @@ -209,13 +209,18 @@ 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,
>                     mClientInServer ? FUTEX_WAIT_PRIVATE : FUTEX_WAIT, old 
> & ~CBLK_FUTEX_WAKE, ts);
>
> Then we will find that AudioRecrodThread will always be blocked, because 
> RecordTrack's destory will also miss the wake mCblk->mFutex, for it was 
> already Interrupted before.
>
> So I wonder why has below CBLC_INTERRUPT condition judgement before wake, 
> Could we just remove it ?
>
> void ClientProxy::interrupt()
> {
>     audio_track_cblk_t* cblk = mCblk;
>     if (!(android_atomic_or(CBLK_INTERRUPT, &cblk->mFlags) & 
> CBLK_INTERRUPT)) {
>         (void) __futex_syscall3(&cblk->mFutex, mClientInServer ? 
> FUTEX_WAKE_PRIVATE : FUTEX_WAKE,
>                 1);
>     }
> }
>
>
> Thanks
>

-- 
-- 
unsubscribe: android-porting+unsubscr...@googlegroups.com
website: http://groups.google.com/group/android-porting

--- 
You received this message because you are subscribed to the Google Groups 
"android-porting" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to android-porting+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to