aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKoushik Dutta <koushd@gmail.com>2015-09-01 15:05:17 -0700
committerKoushik Dutta <koushd@gmail.com>2015-09-01 15:05:17 -0700
commit9872921bce9cfd91b4ad5cdf91c27146df1fd6d0 (patch)
treecc69bff2a4d222e31582f72e10300fb4be36fc82
parente6573be00feb27b2b16446c07d16c37d3d69d3c9 (diff)
downloadAndroidAsync-9872921bce9cfd91b4ad5cdf91c27146df1fd6d0.tar.gz
AndroidAsync-9872921bce9cfd91b4ad5cdf91c27146df1fd6d0.tar.bz2
AndroidAsync-9872921bce9cfd91b4ad5cdf91c27146df1fd6d0.zip
Thread affinity fixes for BufferedDataSink
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/BufferedDataSink.java40
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