diff --git a/hgext/fix.py b/hgext/fix.py
index 15a98880cc07c59c053201f6ecfbcabcdd94614e_aGdleHQvZml4LnB5..136a86327316dd511dfa609bc3e6e76cee5e82e6_aGdleHQvZml4LnB5 100644
--- a/hgext/fix.py
+++ b/hgext/fix.py
@@ -417,7 +417,7 @@
         revs = repo.revs(b'(not public() and not obsolete()) or wdir()')
     elif opts[b'source']:
         source_revs = scmutil.revrange(repo, opts[b'source'])
-        revs = set(repo.revs(b'%ld::', source_revs))
+        revs = set(repo.revs(b'(%ld::) - obsolete()', source_revs))
         if wdirrev in source_revs:
             # `wdir()::` is currently empty, so manually add wdir
             revs.add(wdirrev)
diff --git a/tests/test-fix-topology.t b/tests/test-fix-topology.t
index 15a98880cc07c59c053201f6ecfbcabcdd94614e_dGVzdHMvdGVzdC1maXgtdG9wb2xvZ3kudA==..136a86327316dd511dfa609bc3e6e76cee5e82e6_dGVzdHMvdGVzdC1maXgtdG9wb2xvZ3kudA== 100644
--- a/tests/test-fix-topology.t
+++ b/tests/test-fix-topology.t
@@ -390,6 +390,4 @@
   o  0 A
   
   $ hg fix -s A
-  abort: fixing obsolete revision could cause divergence
-  [255]
   $ hg fix -s B
@@ -395,4 +393,5 @@
   $ hg fix -s B
-  abort: fixing obsolete revision could cause divergence
+  abort: no changesets specified
+  (use --source or --working-dir)
   [255]
   $ hg fix -s D
@@ -397,7 +396,5 @@
   [255]
   $ hg fix -s D
-  abort: fixing obsolete revision could cause divergence
-  [255]
   $ hg fix -s E
   $ cd ..