We use Share lock because it is safe to do so.
 
                        /*
                         * We ignore an invalid pxmin because this means that backend has
-                        * no snapshot and cannot get another one while we hold exclusive
-                        * lock.
+                        * no snapshot currently. We hold a Share lock to avoid contention
+                        * with users taking snapshots.  That is not a problem because
+                        * the current xmin is always at least one higher than the latest
+                        * removed xid, so any new snapshot would never conflict with the
+                        * test here.
                         */
                        if (!TransactionIdIsValid(limitXmin) ||
                                (TransactionIdIsValid(pxmin) && !TransactionIdFollows(pxmin, limitXmin)))