diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,1 +1,7 @@
-__3.0.1__ [Support for in-memory certificates and keys](https://github.com/yesodweb/wai/issues/301)
+## 3.0.1.2
+
+[Make sure Timer is tickled in sendfile. #323](https://github.com/yesodweb/wai/pull/323)
+
+## 3.0.1
+
+[Support for in-memory certificates and keys](https://github.com/yesodweb/wai/issues/301)
diff --git a/Network/Wai/Handler/WarpTLS.hs b/Network/Wai/Handler/WarpTLS.hs
--- a/Network/Wai/Handler/WarpTLS.hs
+++ b/Network/Wai/Handler/WarpTLS.hs
@@ -222,7 +222,7 @@
       , connBufferSize       = bufferSize
       }
       where
-        sendfile fp offset len _th headers = do
+        sendfile fp offset len tickle headers = do
             TLS.sendData ctx $ L.fromChunks headers
             IO.withBinaryFile fp IO.ReadMode $ \h -> do
                 IO.hSeek h IO.AbsoluteSeek offset
@@ -234,6 +234,7 @@
                 unless (B.null bs) $ do
                     let x = B.take remaining bs
                     TLS.sendData ctx $ L.fromChunks [x]
+                    tickle -- This tickles the Timer.  It MUST be called per chunk.
                     loop h $ remaining - B.length x
 
         close = freeBuffer readBuf `finally`
diff --git a/warp-tls.cabal b/warp-tls.cabal
--- a/warp-tls.cabal
+++ b/warp-tls.cabal
@@ -1,5 +1,5 @@
 Name:                warp-tls
-Version:             3.0.1.1
+Version:             3.0.1.2
 Synopsis:            HTTP over SSL/TLS support for Warp via the TLS package
 License:             MIT
 License-file:        LICENSE
