server/apps/files/js/semaphore.js

42 lines
773 B
JavaScript
Raw Normal View History

/*
* 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();
}
};
};
// needed on public share page to properly register this
if (!OCA.Files) {
OCA.Files = {};
}
OCA.Files.Semaphore = Semaphore;
})();