From c1ab21ba2f03ef76543d265132e3bf0bf50ff2d1 Mon Sep 17 00:00:00 2001 From: akwizgran <akwizgran@users.sourceforge.net> Date: Thu, 8 Dec 2011 12:56:00 +0000 Subject: [PATCH] Don't generate acks faster than the IO thread can write them. --- .../briar/transport/stream/StreamConnection.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/components/net/sf/briar/transport/stream/StreamConnection.java b/components/net/sf/briar/transport/stream/StreamConnection.java index cfbf1f224c..8540e0b40e 100644 --- a/components/net/sf/briar/transport/stream/StreamConnection.java +++ b/components/net/sf/briar/transport/stream/StreamConnection.java @@ -154,7 +154,7 @@ abstract class StreamConnection implements DatabaseListener { // Mark the unrequested messages as seen dbExecutor.execute(new SetSeen(seen)); // Start sending the requested messages - dbExecutor.execute(new GenerateBatch(requested)); + dbExecutor.execute(new GenerateBatches(requested)); } else if(reader.hasSubscriptionUpdate()) { SubscriptionUpdate s = reader.readSubscriptionUpdate(); dbExecutor.execute(new ReceiveSubscriptionUpdate(s)); @@ -375,10 +375,7 @@ abstract class StreamConnection implements DatabaseListener { int maxBatches = writer.getMaxBatchesForAck(Long.MAX_VALUE); try { Ack a = db.generateAck(contactId, maxBatches); - while(a != null) { - writerTasks.add(new WriteAck(a)); - a = db.generateAck(contactId, maxBatches); - } + if(a != null) writerTasks.add(new WriteAck(a)); } catch(DbException e) { if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage()); } @@ -398,6 +395,7 @@ abstract class StreamConnection implements DatabaseListener { assert writer != null; try { writer.writeAck(ack); + dbExecutor.execute(new GenerateAcks()); } catch(IOException e) { if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage()); transport.dispose(false); @@ -406,11 +404,11 @@ abstract class StreamConnection implements DatabaseListener { } // This task runs on a database thred - private class GenerateBatch implements Runnable { + private class GenerateBatches implements Runnable { private final Collection<MessageId> requested; - private GenerateBatch(Collection<MessageId> requested) { + private GenerateBatches(Collection<MessageId> requested) { this.requested = requested; } @@ -443,7 +441,7 @@ abstract class StreamConnection implements DatabaseListener { try { writer.writeBatch(batch); if(requested.isEmpty()) dbExecutor.execute(new GenerateOffer()); - else dbExecutor.execute(new GenerateBatch(requested)); + else dbExecutor.execute(new GenerateBatches(requested)); } catch(IOException e) { if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage()); transport.dispose(false); -- GitLab