diff --git a/storage/innobase/include/trx0purge.h b/storage/innobase/include/trx0purge.h
index 6d1649c0a9c..a533bf782c8 100644
--- a/storage/innobase/include/trx0purge.h
+++ b/storage/innobase/include/trx0purge.h
@@ -150,7 +150,7 @@ private:
 	/** whether purge is enabled; protected by latch and my_atomic */
 	int32_t		m_enabled;
 	/** number of pending stop() calls without resume() */
-	int32_t		m_paused;
+	Atomic_counter<int32_t>		m_paused;
 public:
 	que_t*		query;		/*!< The query graph which will do the
 					parallelized purge operation */
@@ -254,13 +254,7 @@ public:
   }
   /** @return whether the purge coordinator is paused */
   bool paused()
-  { return my_atomic_load32_explicit(&m_paused, MY_MEMORY_ORDER_RELAXED); }
-  /** @return whether the purge coordinator is paused */
-  bool paused_latched()
-  {
-    ut_ad(rw_lock_own_flagged(&latch, RW_LOCK_FLAG_X | RW_LOCK_FLAG_S));
-    return m_paused != 0;
-  }
+  { return m_paused != 0; }
 
   /** Enable purge at startup. Not protected by latch; the main thread
   will wait for purge_sys.enabled() in srv_start() */
diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc
index cbaf8e8ecb8..040144a9c11 100644
--- a/storage/innobase/srv/srv0srv.cc
+++ b/storage/innobase/srv/srv0srv.cc
@@ -2628,7 +2628,7 @@ srv_purge_coordinator_suspend(
 		rw_lock_x_lock(&purge_sys.latch);
 
 		stop = srv_shutdown_state == SRV_SHUTDOWN_NONE
-			&& purge_sys.paused_latched();
+			&& purge_sys.paused();
 
 		if (!stop) {
 			if (timeout
diff --git a/storage/innobase/trx/trx0purge.cc b/storage/innobase/trx/trx0purge.cc
index dd3171740c7..294b3010af9 100644
--- a/storage/innobase/trx/trx0purge.cc
+++ b/storage/innobase/trx/trx0purge.cc
@@ -1361,7 +1361,7 @@ void purge_sys_t::stop()
 
   ut_ad(srv_n_purge_threads > 0);
 
-  if (0 == my_atomic_add32_explicit(&m_paused, 1, MY_MEMORY_ORDER_RELAXED))
+  if (m_paused++ == 0)
   {
     /* We need to wakeup the purge thread in case it is suspended, so
     that it can acknowledge the state change. */
@@ -1395,8 +1395,7 @@ void purge_sys_t::resume()
      return;
    }
 
-   int32_t paused= my_atomic_add32_explicit(&m_paused, -1,
-                                            MY_MEMORY_ORDER_RELAXED);
+   int32_t paused= m_paused--;
    ut_a(paused);
 
    if (paused == 1)