Don't error out when reindexing a post/thread that has been deleted
diff --git a/Allura/allura/model/discuss.py b/Allura/allura/model/discuss.py
index 25510c8..b3cf04b 100644
--- a/Allura/allura/model/discuss.py
+++ b/Allura/allura/model/discuss.py
@@ -600,11 +600,13 @@
 
     @property
     def subject(self):
-        subject = self.thread.subject
-        if not subject:
-            artifact = self.thread.artifact
-            if artifact:
-                subject = getattr(artifact, 'email_subject', '')
+        subject = None
+        if self.thread:
+            subject = self.thread.subject
+            if not subject:
+                artifact = self.thread.artifact
+                if artifact:
+                    subject = getattr(artifact, 'email_subject', '')
         return subject or '(no subject)'
 
     @LazyProperty
diff --git a/Allura/allura/tests/model/test_discussion.py b/Allura/allura/tests/model/test_discussion.py
index 2ff36f4..27f83cf 100644
--- a/Allura/allura/tests/model/test_discussion.py
+++ b/Allura/allura/tests/model/test_discussion.py
@@ -541,3 +541,18 @@
     p1 = M.Post(discussion_id=d._id, thread_id=t._id, status='spam')
     p1.spam()
     assert_equal(t.num_replies, 1)
+
+
+def test_deleted_thread_index():
+    d = M.Discussion(shortname='test', name='test')
+    t = M.Thread(discussion_id=d._id, subject='Test Thread')
+    p = M.Post(discussion_id=d._id, thread_id=t._id, status='ok')
+    t.delete()
+    ThreadLocalORMSession.flush_all()
+
+    # re-query, so relationships get reloaded
+    ThreadLocalORMSession.close_all()
+    p = M.Post.query.get(_id=p._id)
+
+    # just make sure this doesn't fail
+    p.index()
\ No newline at end of file