diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Changelog for gargoyle
 
+## 0.1.2.0
+
+* Fix a bug with shutting down on Apple Silicon
+
 ## 0.1.1.1
 
 * Add support for ghc 9.0.2
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
 # gargoyle
-[![Haskell](https://img.shields.io/badge/language-Haskell-orange.svg)](https://haskell.org) [![Hackage](https://img.shields.io/hackage/v/gargoyle.svg)](https://hackage.haskell.org/package/gargoyle) [![Hackage CI](https://matrix.hackage.haskell.org/api/v2/packages/gargoyle/badge)](https://matrix.hackage.haskell.org/#/package/gargoyle)   [![Github CI](https://github.com/obsidiansystems/gargoyle/workflows/github-action/badge.svg)](https://github.com/obsidiansystems/gargoyle/actions) [![BSD3 License](https://img.shields.io/badge/license-BSD3-blue.svg)](https://github.com/obsidiansystems/gargoyle/blob/master/LICENSE)
+[![Haskell](https://img.shields.io/badge/language-Haskell-orange.svg)](https://haskell.org) [![Hackage](https://img.shields.io/hackage/v/gargoyle.svg)](https://hackage.haskell.org/package/gargoyle) [![Github CI](https://github.com/obsidiansystems/gargoyle/workflows/github-action/badge.svg)](https://github.com/obsidiansystems/gargoyle/actions) [![BSD3 License](https://img.shields.io/badge/license-BSD3-blue.svg)](https://github.com/obsidiansystems/gargoyle/blob/master/LICENSE)
 
 
 Gargoyle is a framework for managing daemons from Haskell. Currently, the only requirement is that the daemon be able to communicate over a Unix domain socket. See [gargoyle-postgresql](https://hackage.haskell.org/package/gargoyle-postgresql) for an example that uses gargoyle to manage postgresql.
diff --git a/gargoyle.cabal b/gargoyle.cabal
--- a/gargoyle.cabal
+++ b/gargoyle.cabal
@@ -1,5 +1,5 @@
 name:               gargoyle
-version:            0.1.1.1
+version:            0.1.2.0
 license:            BSD3
 license-file:       LICENSE
 author:             Obsidian Systems LLC
diff --git a/src/Gargoyle.hs b/src/Gargoyle.hs
--- a/src/Gargoyle.hs
+++ b/src/Gargoyle.hs
@@ -187,7 +187,8 @@
           n <- takeMVar numClientsVar
           case pred n of
             0 -> do
-              shutdown controlSocket ShutdownBoth
+              -- If the client side beats us to this, we'll get an error here. This might be specific to Apple Silicon.
+              catch (shutdown controlSocket ShutdownBoth) $ \(_ :: IOException) -> pure ()
               -- We have to explicitly kill the accept thread, because otherwise (sometimes?) 'accept' will begin returning EAGAIN, and ghc will continuously retry it.  This busywait consumes 100% of CPU, prevents the monitor from actually exiting, and leaves the control socket and lock file in a state where another monitor can't be started.
               killThread acceptThread
               putMVar shutdownVar ()
