Plugins may dispose of resources differently depending on whether a

connection was recognised.
This commit is contained in:
akwizgran
2011-12-08 18:56:53 +00:00
parent 0fdc69ff00
commit 844ae8f0a7
18 changed files with 97 additions and 74 deletions

View File

@@ -29,7 +29,7 @@ class BluetoothTransportConnection implements StreamTransportConnection {
return stream.openOutputStream();
}
public void dispose(boolean success) {
public void dispose(boolean exception, boolean recognised) {
try {
stream.close();
} catch(IOException e) {

View File

@@ -27,13 +27,13 @@ class FileTransportReader implements BatchTransportReader {
return in;
}
public void dispose(boolean success) {
public void dispose(boolean exception, boolean recognised) {
try {
in.close();
} catch(IOException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
}
if(success) {
if(recognised) {
file.delete();
plugin.readerFinished(file);
}

View File

@@ -34,13 +34,13 @@ class FileTransportWriter implements BatchTransportWriter {
return out;
}
public void dispose(boolean success) {
public void dispose(boolean exception) {
try {
out.close();
} catch(IOException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
}
if(success) plugin.writerFinished(file);
else file.delete();
if(exception) file.delete();
else plugin.writerFinished(file);
}
}

View File

@@ -28,7 +28,7 @@ class SocketTransportConnection implements StreamTransportConnection {
return socket.getOutputStream();
}
public void dispose(boolean success) {
public void dispose(boolean exception, boolean recognised) {
try {
socket.close();
} catch(IOException e) {

View File

@@ -79,10 +79,10 @@ class IncomingBatchConnection {
throw new FormatException();
}
}
transport.dispose(true);
transport.dispose(false, true);
} catch(IOException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
transport.dispose(false);
transport.dispose(true, true);
}
}

View File

@@ -90,13 +90,13 @@ class OutgoingBatchConnection {
}
// Flush the output stream
out.flush();
transport.dispose(true);
transport.dispose(false);
} catch(DbException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
transport.dispose(false);
transport.dispose(true);
} catch(IOException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
transport.dispose(false);
transport.dispose(true);
}
}
}

View File

@@ -166,13 +166,13 @@ abstract class StreamConnection implements DatabaseListener {
}
}
writerTasks.add(CLOSE);
if(!disposed.getAndSet(true)) transport.dispose(true);
if(!disposed.getAndSet(true)) transport.dispose(false, true);
} catch(DbException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
if(!disposed.getAndSet(true)) transport.dispose(false);
if(!disposed.getAndSet(true)) transport.dispose(true, true);
} catch(IOException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
if(!disposed.getAndSet(true)) transport.dispose(false);
if(!disposed.getAndSet(true)) transport.dispose(true, true);
}
}
@@ -203,17 +203,17 @@ abstract class StreamConnection implements DatabaseListener {
if(task == CLOSE) break;
task.run();
}
if(!disposed.getAndSet(true)) transport.dispose(true);
if(!disposed.getAndSet(true)) transport.dispose(false, true);
} catch(DbException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
if(!disposed.getAndSet(true)) transport.dispose(false);
if(!disposed.getAndSet(true)) transport.dispose(true, true);
} catch(InterruptedException e) {
if(LOG.isLoggable(Level.INFO))
LOG.info("Interrupted while waiting for task");
if(!disposed.getAndSet(true)) transport.dispose(false);
if(!disposed.getAndSet(true)) transport.dispose(true, true);
} catch(IOException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
if(!disposed.getAndSet(true)) transport.dispose(false);
if(!disposed.getAndSet(true)) transport.dispose(true, true);
} finally {
db.removeListener(this);
}
@@ -308,7 +308,7 @@ abstract class StreamConnection implements DatabaseListener {
writer.writeRequest(request);
} catch(IOException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
transport.dispose(false);
transport.dispose(true, true);
}
}
}
@@ -398,7 +398,7 @@ abstract class StreamConnection implements DatabaseListener {
dbExecutor.execute(new GenerateAcks());
} catch(IOException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
transport.dispose(false);
transport.dispose(true, true);
}
}
}
@@ -444,7 +444,7 @@ abstract class StreamConnection implements DatabaseListener {
else dbExecutor.execute(new GenerateBatches(requested));
} catch(IOException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
transport.dispose(false);
transport.dispose(true, true);
}
}
}
@@ -487,7 +487,7 @@ abstract class StreamConnection implements DatabaseListener {
writer.writeOffer(offer);
} catch(IOException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
transport.dispose(false);
transport.dispose(true, true);
}
}
}
@@ -520,7 +520,7 @@ abstract class StreamConnection implements DatabaseListener {
writer.writeSubscriptionUpdate(update);
} catch(IOException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
transport.dispose(false);
transport.dispose(true, true);
}
}
}
@@ -553,7 +553,7 @@ abstract class StreamConnection implements DatabaseListener {
writer.writeTransportUpdate(update);
} catch(IOException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
transport.dispose(false);
transport.dispose(true, true);
}
}
}

View File

@@ -89,14 +89,14 @@ class ConnectionDispatcherImpl implements ConnectionDispatcher {
try {
byte[] tag = readTag(r.getInputStream());
ConnectionContext ctx = recogniser.acceptConnection(t, tag);
if(ctx == null) r.dispose(true);
if(ctx == null) r.dispose(false, false);
else batchConnFactory.createIncomingConnection(ctx, r, tag);
} catch(DbException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
r.dispose(false);
r.dispose(true, false);
} catch(IOException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
r.dispose(false);
r.dispose(true, false);
}
}
}
@@ -116,14 +116,14 @@ class ConnectionDispatcherImpl implements ConnectionDispatcher {
try {
byte[] tag = readTag(s.getInputStream());
ConnectionContext ctx = recogniser.acceptConnection(t, tag);
if(ctx == null) s.dispose(true);
if(ctx == null) s.dispose(false, false);
else streamConnFactory.createIncomingConnection(ctx, s, tag);
} catch(DbException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
s.dispose(false);
s.dispose(true, false);
} catch(IOException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
s.dispose(false);
s.dispose(true, false);
}
}
}