aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service/database.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix-data-service/database.scm')
-rw-r--r--guix-data-service/database.scm19
1 files changed, 19 insertions, 0 deletions
diff --git a/guix-data-service/database.scm b/guix-data-service/database.scm
index 756bfef..7270e90 100644
--- a/guix-data-service/database.scm
+++ b/guix-data-service/database.scm
@@ -38,6 +38,8 @@
check-test-database!
+ lock-advisory-session-lock
+ unlock-advisory-session-lock
with-advisory-session-lock
with-advisory-session-lock/log-time
obtain-advisory-transaction-lock
@@ -282,6 +284,23 @@
(unless (string=? name "guix_data_service_test")
(error "tests being run against non test database")))))
+(define (lock-advisory-session-lock conn lock)
+ (let ((lock-number (symbol-hash lock)))
+ (exec-query conn
+ "SELECT pg_advisory_lock($1)"
+ (list (number->string lock-number)))
+ lock-number))
+
+(define (unlock-advisory-session-lock conn lock)
+ (let ((lock-number
+ (if (number? lock)
+ lock
+ (symbol-hash lock))))
+ (exec-query conn
+ "SELECT pg_advisory_lock($1)"
+ (list (number->string lock-number))))
+ #t)
+
(define (with-advisory-session-lock conn lock f)
(let ((lock-number (number->string (symbol-hash lock))))
(exec-query conn