From 93c89fe0a763b237dc9e7b66a2061f7f8a4d95df Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Fri, 14 Sep 2007 18:17:50 +0000 Subject: [PATCH] Be sure that we always dispatch subscription responses (success or failure) on the dobjmgr thread to relieve the caller of the burden of knowing what thread they are on. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4826 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../presents/server/PresentsClient.java | 2 +- .../presents/server/PresentsDObjectMgr.java | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/java/com/threerings/presents/server/PresentsClient.java b/src/java/com/threerings/presents/server/PresentsClient.java index 9210bf1ca..71ebd3e37 100644 --- a/src/java/com/threerings/presents/server/PresentsClient.java +++ b/src/java/com/threerings/presents/server/PresentsClient.java @@ -820,7 +820,7 @@ public class PresentsClient // from interface ProxySubscriber public void requestFailed (int oid, ObjectAccessException cause) { - safePostMessage(new FailureResponse(oid, cause.getMessage())); + postMessage(new FailureResponse(oid, cause.getMessage())); } // from interface ProxySubscriber diff --git a/src/java/com/threerings/presents/server/PresentsDObjectMgr.java b/src/java/com/threerings/presents/server/PresentsDObjectMgr.java index d921a21d8..aaf9757ae 100644 --- a/src/java/com/threerings/presents/server/PresentsDObjectMgr.java +++ b/src/java/com/threerings/presents/server/PresentsDObjectMgr.java @@ -168,12 +168,8 @@ public class PresentsDObjectMgr // from interface DObjectManager public void subscribeToObject (int oid, Subscriber target) { - if (oid <= 0) { - target.requestFailed(oid, new ObjectAccessException("Invalid oid " + oid + ".")); - } else { - // queue up an access object event - postEvent(new AccessObjectEvent(oid, target, AccessObjectEvent.SUBSCRIBE)); - } + // queue up an access object event + postEvent(new AccessObjectEvent(oid, target, AccessObjectEvent.SUBSCRIBE)); } // from interface DObjectManager @@ -804,6 +800,13 @@ public class PresentsDObjectMgr public boolean applyToObject (DObject target) throws ObjectAccessException { + // sanity check; we do this check here rather than in subscribeToObject() to ensure + // that we always dispatch our response on the dobjmgr thread + if (_oid <= 0) { + _target.requestFailed(_oid, new ObjectAccessException("Invalid oid " + _oid + ".")); + return false; + } + // look up the target object @SuppressWarnings("unchecked") T obj = (T)_objects.get(_oid);