From b514ddbbf26d9cb3074211a9b90f5824ff1baa53 Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Thu, 28 Jun 2007 21:42:41 +0000 Subject: [PATCH] Always dispatch clientResolved() on the dobjmgr thread, even if the client is already resolved and we're being called from a non-dobjmgr thread. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4744 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../threerings/presents/server/ClientManager.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/java/com/threerings/presents/server/ClientManager.java b/src/java/com/threerings/presents/server/ClientManager.java index ff6c369c7..d5e716de8 100644 --- a/src/java/com/threerings/presents/server/ClientManager.java +++ b/src/java/com/threerings/presents/server/ClientManager.java @@ -231,13 +231,19 @@ public class ClientManager * {@link #releaseClientObject} when the caller is finished with the client object. */ public synchronized void resolveClientObject ( - Name username, final ClientResolutionListener listener) + final Name username, final ClientResolutionListener listener) { // look to see if the client object is already resolved - ClientObject clobj = _objmap.get(username); + final ClientObject clobj = _objmap.get(username); if (clobj != null) { - clobj.reference(); - listener.clientResolved(username, clobj); + // report that the client is resolved on the dobjmgr thread to provide equivalent + // behavior to the case where we actually have to do the resolution + PresentsServer.omgr.postRunnable(new Runnable() { + public void run () { + clobj.reference(); + listener.clientResolved(username, clobj); + } + }); return; }