Mercurial > java-rrd-hg
changeset 52:555325bdb825 default tip
* avoid member to stay marked as in use if there is an exception in
RRDCommandPool.getConnection()
author | Peter Stamfest <peter@stamfest.at> |
---|---|
date | Sun, 24 Jan 2016 17:47:24 +0100 |
parents | 5063db74249e |
children | |
files | pom.xml src/main/java/net/stamfest/rrd/RRDCommandPool.java |
diffstat | 2 files changed, 26 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/pom.xml Sun Jan 24 17:46:18 2016 +0100 +++ b/pom.xml Sun Jan 24 17:47:24 2016 +0100 @@ -3,7 +3,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>net.stamfest</groupId> <artifactId>java-rrd</artifactId> - <version>2.0.0</version> + <version>2.0.1</version> <name>java-rrd</name> <description> This is a Java interface to Tobi Oetikers rrdtool. It is pure
--- a/src/main/java/net/stamfest/rrd/RRDCommandPool.java Sun Jan 24 17:46:18 2016 +0100 +++ b/src/main/java/net/stamfest/rrd/RRDCommandPool.java Sun Jan 24 17:47:24 2016 +0100 @@ -128,13 +128,31 @@ member.inuse = true; } - member.requestcount++; - if (member.rrdp == null) { - member.requestcount = 0; - member.rrdp = factory.createRRDCommand(); - } - - return new RRDPoolMemberWrapper(member); + /* + NOTE: This is a hackish way to make sure we do not block a member if anything goes + wrong beyond this point and an exception gets thrown: check the final return + value to be not null in the finally block... + */ + RRDPoolMemberWrapper r = null; + try { + member.requestcount++; + if (member.rrdp == null) { + member.requestcount = 0; + member.rrdp = factory.createRRDCommand(); + } + r = new RRDPoolMemberWrapper(member); + return r; + } finally { + if (r == null) { + /* if r is null, an exception must have been thrown and we would + loose the ability to unlock the member later on. Catch this + possibility right here. */ + synchronized (this) { + member.inuse = false; + this.notify(); + } + } + } } public void done(RRDCommand cmd) {