diff options
author | Koushik Dutta <koushd@gmail.com> | 2015-09-01 15:05:17 -0700 |
---|---|---|
committer | Koushik Dutta <koushd@gmail.com> | 2015-09-01 15:05:17 -0700 |
commit | 9872921bce9cfd91b4ad5cdf91c27146df1fd6d0 (patch) | |
tree | cc69bff2a4d222e31582f72e10300fb4be36fc82 | |
parent | e6573be00feb27b2b16446c07d16c37d3d69d3c9 (diff) | |
download | AndroidAsync-9872921bce9cfd91b4ad5cdf91c27146df1fd6d0.tar.gz AndroidAsync-9872921bce9cfd91b4ad5cdf91c27146df1fd6d0.tar.bz2 AndroidAsync-9872921bce9cfd91b4ad5cdf91c27146df1fd6d0.zip |
Thread affinity fixes for BufferedDataSink
-rw-r--r-- | AndroidAsync/src/com/koushikdutta/async/BufferedDataSink.java | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/AndroidAsync/src/com/koushikdutta/async/BufferedDataSink.java b/AndroidAsync/src/com/koushikdutta/async/BufferedDataSink.java index 8daa836..3c074c5 100644 --- a/AndroidAsync/src/com/koushikdutta/async/BufferedDataSink.java +++ b/AndroidAsync/src/com/koushikdutta/async/BufferedDataSink.java @@ -49,18 +49,23 @@ public class BufferedDataSink implements DataSink { write(bb, false); } - protected void write(ByteBufferList bb, boolean ignoreBuffer) { - if (!mPendingWrites.hasRemaining()) - mDataSink.write(bb); + protected void write(final ByteBufferList bb, final boolean ignoreBuffer) { + getServer().run(new Runnable() { + @Override + public void run() { + if (!mPendingWrites.hasRemaining()) + mDataSink.write(bb); - if (bb.remaining() > 0) { - int toRead = Math.min(bb.remaining(), mMaxBuffer); - if (ignoreBuffer) - toRead = bb.remaining(); - if (toRead > 0) { - bb.get(mPendingWrites, toRead); + if (bb.remaining() > 0) { + int toRead = Math.min(bb.remaining(), mMaxBuffer); + if (ignoreBuffer) + toRead = bb.remaining(); + if (toRead > 0) { + bb.get(mPendingWrites, toRead); + } + } } - } + }); } WritableCallback mWritable; @@ -96,11 +101,16 @@ public class BufferedDataSink implements DataSink { boolean endPending; @Override public void end() { - if (mPendingWrites.hasRemaining()) { - endPending = true; - return; - } - mDataSink.end(); + getServer().run(new Runnable() { + @Override + public void run() { + if (mPendingWrites.hasRemaining()) { + endPending = true; + return; + } + mDataSink.end(); + } + }); } @Override |