diff --git a/hook/hook.wsgi b/hook/hook.wsgi
index d0828e64e9984894396e3cdfa6a3dae2ccb90336..36ea076d0dbd5dc9b635f28da28972e34ebd757d 100644
--- a/hook/hook.wsgi
+++ b/hook/hook.wsgi
@@ -38,6 +38,15 @@ def db_query(query, args=()):
         db_connect()
         db.execute(query, args)
 
+def db_reset():
+    # At the end of every request, we have to close the implicitly opened
+    # transaction. Otherwise we end up with serving stale data.
+    if db_connection is not None:
+        try:
+            db_connection.rollback()
+        except:
+            pass
+
 ### Utilities ###
 
 def parse_time(iso_time):
@@ -279,3 +288,5 @@ def application(env, start_response):
     except Exception as exc:
         app.log(traceback.print_exception(etype=None, value=exc, tb=exc.__traceback__))
         return app.http_error(500, "Internal server error")
+    finally:
+        db_reset()