mirror of
https://github.com/penpot/penpot.git
synced 2025-05-24 08:56:11 +02:00
26 lines
656 B
Clojure
26 lines
656 B
Clojure
;; This Source Code Form is subject to the terms of the Mozilla Public
|
|
;; License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
;;
|
|
;; Copyright (c) KALEIDOS INC
|
|
|
|
(ns app.util.locks
|
|
"A syntactic helpers for using locks."
|
|
(:refer-clojure :exclude [locking])
|
|
(:import
|
|
java.util.concurrent.locks.Lock
|
|
java.util.concurrent.locks.ReentrantLock))
|
|
|
|
(defn create
|
|
[]
|
|
(ReentrantLock.))
|
|
|
|
(defmacro locking
|
|
[lsym & body]
|
|
(let [lsym (vary-meta lsym assoc :tag `Lock)]
|
|
`(do
|
|
(.lock ~lsym)
|
|
(try
|
|
~@body
|
|
(finally
|
|
(.unlock ~lsym))))))
|