summaryrefslogtreecommitdiff
path: root/inc/lock.php
diff options
context:
space:
mode:
authorAppleman1234 <applemansigloo@gmail.com>2016-12-15 18:25:42 +0900
committerGitHub <noreply@github.com>2016-12-15 18:25:42 +0900
commitcae526e65a20f3da2d8884c4d8e8978c54120000 (patch)
tree2954153dd49f616f5018490058ff4bfbd17300d3 /inc/lock.php
parentb58fab98147a92c8e6d22f15d23684508b6bb811 (diff)
parent5feae402cb55d49963bfd2c6f5a33d10690ecbc1 (diff)
Merge pull request #79 from lainchan/clean_prod_vichan_update
Merge vichan changes from upstream and changes directly applied to the site.
Diffstat (limited to 'inc/lock.php')
-rw-r--r--inc/lock.php39
1 files changed, 39 insertions, 0 deletions
diff --git a/inc/lock.php b/inc/lock.php
new file mode 100644
index 00000000..4fb2f5df
--- /dev/null
+++ b/inc/lock.php
@@ -0,0 +1,39 @@
+<?php
+class Lock {
+ function __construct($key) { global $config;
+ if ($config['lock']['enabled'] == 'fs') {
+ $key = str_replace('/', '::', $key);
+ $key = str_replace("\0", '', $key);
+
+ $this->f = fopen("tmp/locks/$key", "w");
+ }
+ }
+
+ // Get a shared lock
+ function get($nonblock = false) { global $config;
+ if ($config['lock']['enabled'] == 'fs') {
+ $wouldblock = false;
+ flock($this->f, LOCK_SH | ($nonblock ? LOCK_NB : 0), $wouldblock);
+ if ($nonblock && $wouldblock) return false;
+ }
+ return $this;
+ }
+
+ // Get an exclusive lock
+ function get_ex($nonblock = false) { global $config;
+ if ($config['lock']['enabled'] == 'fs') {
+ $wouldblock = false;
+ flock($this->f, LOCK_EX | ($nonblock ? LOCK_NB : 0), $wouldblock);
+ if ($nonblock && $wouldblock) return false;
+ }
+ return $this;
+ }
+
+ // Free a lock
+ function free() { global $config;
+ if ($config['lock']['enabled'] == 'fs') {
+ flock($this->f, LOCK_UN);
+ }
+ return $this;
+ }
+}