aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files/js/semaphore.js
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files/js/semaphore.js')
-rw-r--r--apps/files/js/semaphore.js37
1 files changed, 37 insertions, 0 deletions
diff --git a/apps/files/js/semaphore.js b/apps/files/js/semaphore.js
new file mode 100644
index 00000000000..044f0af23f3
--- /dev/null
+++ b/apps/files/js/semaphore.js
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2018
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+(function(){
+ var Semaphore = function(max) {
+ var counter = 0;
+ var waiting = [];
+
+ this.acquire = function() {
+ if(counter < max) {
+ counter++;
+ return new Promise(function(resolve) { resolve(); });
+ } else {
+ return new Promise(function(resolve) { waiting.push(resolve); });
+ }
+ };
+
+ this.release = function() {
+ counter--;
+ if (waiting.length > 0 && counter < max) {
+ counter++;
+ var promise = waiting.shift();
+ promise();
+ }
+ };
+ };
+
+ OCA.Files.Semaphore = Semaphore;
+
+})();