From dfa4860200249a5593392dfd4cb1137b328bb486 Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Wed, 5 Nov 2014 18:34:59 +0000
Subject: [PATCH] Cancel database queries if the messaging session has been
 interrupted.

---
 .../messaging/ReactiveOutgoingSession.java    | 28 ++++++++++++++++---
 .../messaging/SinglePassOutgoingSession.java  |  8 ++++++
 2 files changed, 32 insertions(+), 4 deletions(-)

diff --git a/briar-core/src/org/briarproject/messaging/ReactiveOutgoingSession.java b/briar-core/src/org/briarproject/messaging/ReactiveOutgoingSession.java
index 3dc7d38c89..caf87129ff 100644
--- a/briar-core/src/org/briarproject/messaging/ReactiveOutgoingSession.java
+++ b/briar-core/src/org/briarproject/messaging/ReactiveOutgoingSession.java
@@ -165,12 +165,22 @@ class ReactiveOutgoingSession implements MessagingSession, EventListener {
 			if(((MessageToRequestEvent) e).getContactId().equals(contactId))
 				dbExecutor.execute(new GenerateRequest());
 		} else if(e instanceof RemoteRetentionTimeUpdatedEvent) {
-			dbExecutor.execute(new GenerateRetentionAck());
+			RemoteRetentionTimeUpdatedEvent r =
+					(RemoteRetentionTimeUpdatedEvent) e;
+			if(r.getContactId().equals(contactId))
+				dbExecutor.execute(new GenerateRetentionAck());
 		} else if(e instanceof RemoteSubscriptionsUpdatedEvent) {
-			dbExecutor.execute(new GenerateSubscriptionAck());
-			dbExecutor.execute(new GenerateOffer());
+			RemoteSubscriptionsUpdatedEvent r =
+					(RemoteSubscriptionsUpdatedEvent) e;
+			if(r.getContactId().equals(contactId)) {
+				dbExecutor.execute(new GenerateSubscriptionAck());
+				dbExecutor.execute(new GenerateOffer());
+			}
 		} else if(e instanceof RemoteTransportsUpdatedEvent) {
-			dbExecutor.execute(new GenerateTransportAcks());
+			RemoteTransportsUpdatedEvent r =
+					(RemoteTransportsUpdatedEvent) e;
+			if(r.getContactId().equals(contactId))
+				dbExecutor.execute(new GenerateTransportAcks());
 		} else if(e instanceof TransportRemovedEvent) {
 			TransportRemovedEvent t = (TransportRemovedEvent) e;
 			if(ctx.getTransportId().equals(t.getTransportId())) {
@@ -184,6 +194,7 @@ class ReactiveOutgoingSession implements MessagingSession, EventListener {
 	private class GenerateAck implements Runnable {
 
 		public void run() {
+			if(interrupted) return;
 			int maxMessages = packetWriter.getMaxMessagesForAck(Long.MAX_VALUE);
 			try {
 				Ack a = db.generateAck(contactId, maxMessages);
@@ -217,6 +228,7 @@ class ReactiveOutgoingSession implements MessagingSession, EventListener {
 	private class GenerateBatch implements Runnable {
 
 		public void run() {
+			if(interrupted) return;
 			try {
 				Collection<byte[]> b = db.generateRequestedBatch(contactId,
 						MAX_PACKET_LENGTH, maxLatency);
@@ -250,6 +262,7 @@ class ReactiveOutgoingSession implements MessagingSession, EventListener {
 	private class GenerateOffer implements Runnable {
 
 		public void run() {
+			if(interrupted) return;
 			int maxMessages = packetWriter.getMaxMessagesForOffer(
 					Long.MAX_VALUE);
 			try {
@@ -284,6 +297,7 @@ class ReactiveOutgoingSession implements MessagingSession, EventListener {
 	private class GenerateRequest implements Runnable {
 
 		public void run() {
+			if(interrupted) return;
 			int maxMessages = packetWriter.getMaxMessagesForRequest(
 					Long.MAX_VALUE);
 			try {
@@ -318,6 +332,7 @@ class ReactiveOutgoingSession implements MessagingSession, EventListener {
 	private class GenerateRetentionAck implements Runnable {
 
 		public void run() {
+			if(interrupted) return;
 			try {
 				RetentionAck a = db.generateRetentionAck(contactId);
 				if(LOG.isLoggable(INFO))
@@ -351,6 +366,7 @@ class ReactiveOutgoingSession implements MessagingSession, EventListener {
 	private class GenerateRetentionUpdate implements Runnable {
 
 		public void run() {
+			if(interrupted) return;
 			try {
 				RetentionUpdate u =
 						db.generateRetentionUpdate(contactId, maxLatency);
@@ -385,6 +401,7 @@ class ReactiveOutgoingSession implements MessagingSession, EventListener {
 	private class GenerateSubscriptionAck implements Runnable {
 
 		public void run() {
+			if(interrupted) return;
 			try {
 				SubscriptionAck a = db.generateSubscriptionAck(contactId);
 				if(LOG.isLoggable(INFO))
@@ -418,6 +435,7 @@ class ReactiveOutgoingSession implements MessagingSession, EventListener {
 	private class GenerateSubscriptionUpdate implements Runnable {
 
 		public void run() {
+			if(interrupted) return;
 			try {
 				SubscriptionUpdate u =
 						db.generateSubscriptionUpdate(contactId, maxLatency);
@@ -452,6 +470,7 @@ class ReactiveOutgoingSession implements MessagingSession, EventListener {
 	private class GenerateTransportAcks implements Runnable {
 
 		public void run() {
+			if(interrupted) return;
 			try {
 				Collection<TransportAck> acks =
 						db.generateTransportAcks(contactId);
@@ -485,6 +504,7 @@ class ReactiveOutgoingSession implements MessagingSession, EventListener {
 	private class GenerateTransportUpdates implements Runnable {
 
 		public void run() {
+			if(interrupted) return;
 			try {
 				Collection<TransportUpdate> t =
 						db.generateTransportUpdates(contactId, maxLatency);
diff --git a/briar-core/src/org/briarproject/messaging/SinglePassOutgoingSession.java b/briar-core/src/org/briarproject/messaging/SinglePassOutgoingSession.java
index 75f991317c..f4c3195ae9 100644
--- a/briar-core/src/org/briarproject/messaging/SinglePassOutgoingSession.java
+++ b/briar-core/src/org/briarproject/messaging/SinglePassOutgoingSession.java
@@ -121,6 +121,7 @@ class SinglePassOutgoingSession implements MessagingSession {
 	private class GenerateAck implements Runnable {
 
 		public void run() {
+			if(interrupted) return;
 			int maxMessages = packetWriter.getMaxMessagesForAck(Long.MAX_VALUE);
 			try {
 				Ack a = db.generateAck(contactId, maxMessages);
@@ -155,6 +156,7 @@ class SinglePassOutgoingSession implements MessagingSession {
 	private class GenerateBatch implements Runnable {
 
 		public void run() {
+			if(interrupted) return;
 			try {
 				Collection<byte[]> b = db.generateBatch(contactId,
 						MAX_PACKET_LENGTH, maxLatency);
@@ -189,6 +191,7 @@ class SinglePassOutgoingSession implements MessagingSession {
 	private class GenerateRetentionAck implements Runnable {
 
 		public void run() {
+			if(interrupted) return;
 			try {
 				RetentionAck a = db.generateRetentionAck(contactId);
 				if(LOG.isLoggable(INFO))
@@ -223,6 +226,7 @@ class SinglePassOutgoingSession implements MessagingSession {
 	private class GenerateRetentionUpdate implements Runnable {
 
 		public void run() {
+			if(interrupted) return;
 			try {
 				RetentionUpdate u =
 						db.generateRetentionUpdate(contactId, maxLatency);
@@ -258,6 +262,7 @@ class SinglePassOutgoingSession implements MessagingSession {
 	private class GenerateSubscriptionAck implements Runnable {
 
 		public void run() {
+			if(interrupted) return;
 			try {
 				SubscriptionAck a = db.generateSubscriptionAck(contactId);
 				if(LOG.isLoggable(INFO))
@@ -292,6 +297,7 @@ class SinglePassOutgoingSession implements MessagingSession {
 	private class GenerateSubscriptionUpdate implements Runnable {
 
 		public void run() {
+			if(interrupted) return;
 			try {
 				SubscriptionUpdate u =
 						db.generateSubscriptionUpdate(contactId, maxLatency);
@@ -327,6 +333,7 @@ class SinglePassOutgoingSession implements MessagingSession {
 	private class GenerateTransportAcks implements Runnable {
 
 		public void run() {
+			if(interrupted) return;
 			try {
 				Collection<TransportAck> acks =
 						db.generateTransportAcks(contactId);
@@ -361,6 +368,7 @@ class SinglePassOutgoingSession implements MessagingSession {
 	private class GenerateTransportUpdates implements Runnable {
 
 		public void run() {
+			if(interrupted) return;
 			try {
 				Collection<TransportUpdate> t =
 						db.generateTransportUpdates(contactId, maxLatency);
-- 
GitLab