diff --git a/components/net/sf/briar/transport/stream/StreamConnection.java b/components/net/sf/briar/transport/stream/StreamConnection.java index cfbf1f224cf9ab7af82e12c68bd1d45d1274c611..8540e0b40e661c5ec15f630fd2fa0534e2237cc7 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);