Commit 62f63dca authored by Gaston Dombiak's avatar Gaston Dombiak Committed by gato

Fixed concurrency problem.

git-svn-id: http://svn.igniterealtime.org/svn/repos/openfire/trunk@9070 b35dd754-fafc-0310-a699-88a17e54d16e
parent 8b4a6687
...@@ -32,6 +32,7 @@ import org.jivesoftware.openfire.user.UserNotFoundException; ...@@ -32,6 +32,7 @@ import org.jivesoftware.openfire.user.UserNotFoundException;
import org.jivesoftware.util.LocaleUtils; import org.jivesoftware.util.LocaleUtils;
import org.jivesoftware.util.Log; import org.jivesoftware.util.Log;
import org.jivesoftware.util.StringUtils; import org.jivesoftware.util.StringUtils;
import org.jivesoftware.util.lock.LockManager;
import org.jivesoftware.util.cache.Cache; import org.jivesoftware.util.cache.Cache;
import org.jivesoftware.util.cache.CacheFactory; import org.jivesoftware.util.cache.CacheFactory;
import org.xmpp.packet.JID; import org.xmpp.packet.JID;
...@@ -44,6 +45,7 @@ import java.util.ArrayList; ...@@ -44,6 +45,7 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.concurrent.locks.Lock;
/** /**
* Simple in memory implementation of the PresenceManager interface. * Simple in memory implementation of the PresenceManager interface.
...@@ -501,7 +503,10 @@ public class PresenceManagerImpl extends BasicModule implements PresenceManager ...@@ -501,7 +503,10 @@ public class PresenceManagerImpl extends BasicModule implements PresenceManager
Connection con = null; Connection con = null;
PreparedStatement pstmt = null; PreparedStatement pstmt = null;
ResultSet rs = null; ResultSet rs = null;
Lock lock = LockManager.getLock(username + "pr");
try { try {
lock.lock();
if (!offlinePresenceCache.containsKey(username) || !lastActivityCache.containsKey(username)) {
con = DbConnectionManager.getConnection(); con = DbConnectionManager.getConnection();
pstmt = con.prepareStatement(LOAD_OFFLINE_PRESENCE); pstmt = con.prepareStatement(LOAD_OFFLINE_PRESENCE);
pstmt.setString(1, username); pstmt.setString(1, username);
...@@ -520,11 +525,13 @@ public class PresenceManagerImpl extends BasicModule implements PresenceManager ...@@ -520,11 +525,13 @@ public class PresenceManagerImpl extends BasicModule implements PresenceManager
lastActivityCache.put(username, NULL_LONG); lastActivityCache.put(username, NULL_LONG);
} }
} }
}
catch (SQLException sqle) { catch (SQLException sqle) {
Log.error(sqle); Log.error(sqle);
} }
finally { finally {
DbConnectionManager.closeConnection(rs, pstmt, con); DbConnectionManager.closeConnection(rs, pstmt, con);
lock.unlock();
} }
} }
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment