Issues (125)

lib/Helper/CommandLock.php (1 issue)

Severity
1
<?php
2
/**
3
 * @copyright Copyright (c) 2017, Matias De lellis <[email protected]>
4
 * @copyright Copyright (c) 2018, Branko Kokanovic <[email protected]>
5
 *
6
 * @author Branko Kokanovic <[email protected]>
7
 *
8
 * @license GNU AGPL version 3 or any later version
9
 *
10
 * This program is free software: you can redistribute it and/or modify
11
 * it under the terms of the GNU Affero General Public License as
12
 * published by the Free Software Foundation, either version 3 of the
13
 * License, or (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU Affero General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU Affero General Public License
21
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
22
 *
23
 */
24
namespace OCA\FaceRecognition\Helper;
25
26
/**
27
 * Tasks that do flock over file and acts as a global mutex,
28
 * so we don't run more than one background task in parallel.
29
 */
30
class CommandLock {
31
32 2
	private static function LockFile(): string {
33 2
		return sys_get_temp_dir() . '/' . 'nextcloud_face_recognition_lock.pid';
34
	}
35
36
	/**
37
	 * @return string
38
	 */
39 2
	public static function IsLockedBy(): string {
40 2
		$fp = fopen(self::LockFile(), 'r');
41 2
		$lockDescription = fread($fp, filesize(self::LockFile()));
42
		//fclose($fp);
43 2
		return $lockDescription;
44
	}
45
46 2
	public static function lock(string $lockDescription) {
47 2
		$fp = fopen(self::LockFile(), 'c');
48 2
		if (!$fp || !flock($fp, LOCK_EX | LOCK_NB, $eWouldBlock) || $eWouldBlock) {
0 ignored issues
show
$fp is of type resource, thus it always evaluated to false.
Loading history...
49 1
			return null;
50
		}
51 2
		fwrite($fp, $lockDescription);
52 2
		return $fp;
53
	}
54
55 2
	public static function unlock($lockFile): void {
56 2
		flock($lockFile, LOCK_UN);
57 2
		unlink(self::LockFile());
58
	}
59
60
}