diff options
Diffstat (limited to 'guix-data-service/database.scm')
-rw-r--r-- | guix-data-service/database.scm | 19 |
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 |