You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
773 B
41 lines
773 B
/* |
|
* 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; |
|
|
|
})();
|
|
|