From f4b7c6b61914070e590507bcb33e4345d3f9b0b9 Mon Sep 17 00:00:00 2001
From: Eugen Rochko <eugen@zeonfederated.com>
Date: Sat, 24 Apr 2021 13:35:39 +0200
Subject: [PATCH] Fix nil error when removing status caused by race condition
 (#16099)

---
 app/lib/status_reach_finder.rb                 | 2 +-
 app/models/status.rb                           | 4 ++++
 app/workers/activitypub/distribution_worker.rb | 2 +-
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/app/lib/status_reach_finder.rb b/app/lib/status_reach_finder.rb
index 0e755d433..735d66a4f 100644
--- a/app/lib/status_reach_finder.rb
+++ b/app/lib/status_reach_finder.rb
@@ -62,7 +62,7 @@ class StatusReachFinder
   end
 
   def followers_inboxes
-    if @status.reply? && @status.thread.account.local? && @status.distributable?
+    if @status.in_reply_to_local_account? && @status.distributable?
       @status.account.followers.or(@status.thread.account.followers).inboxes
     else
       @status.account.followers.inboxes
diff --git a/app/models/status.rb b/app/models/status.rb
index 74e81f612..847921ac2 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -161,6 +161,10 @@ class Status < ApplicationRecord
     attributes['local'] || uri.nil?
   end
 
+  def in_reply_to_local_account?
+    reply? && thread&.account&.local?
+  end
+
   def reblog?
     !reblog_of_id.nil?
   end
diff --git a/app/workers/activitypub/distribution_worker.rb b/app/workers/activitypub/distribution_worker.rb
index 9b4814644..09898ca49 100644
--- a/app/workers/activitypub/distribution_worker.rb
+++ b/app/workers/activitypub/distribution_worker.rb
@@ -35,7 +35,7 @@ class ActivityPub::DistributionWorker
     # Deliver the status to all followers.
     # If the status is a reply to another local status, also forward it to that
     # status' authors' followers.
-    @inboxes ||= if @status.reply? && @status.thread.account.local? && @status.distributable?
+    @inboxes ||= if @status.in_reply_to_local_account? && @status.distributable?
                    @account.followers.or(@status.thread.account.followers).inboxes
                  else
                    @account.followers.inboxes