ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilAssQuestionProcessLockerFile.php
Go to the documentation of this file.
1<?php
2
26{
27 public const PROCESS_NAME_QUESTION_WORKING_STATE_UPDATE = 'questionWorkingStateUpdate';
28
30
35
40 {
41 $this->lockFileStorage = $lockFileStorage;
42 $this->lockFileHandles = [];
43 }
44
49 {
50 $this->requestLock(self::PROCESS_NAME_QUESTION_WORKING_STATE_UPDATE);
51 }
52
57 {
58 $this->releaseLock(self::PROCESS_NAME_QUESTION_WORKING_STATE_UPDATE);
59 }
60
65 {
66 $this->requestLock(self::PROCESS_NAME_QUESTION_WORKING_STATE_UPDATE);
67 }
68
73 {
74 $this->releaseLock(self::PROCESS_NAME_QUESTION_WORKING_STATE_UPDATE);
75 }
76
80 private function requestLock($processName): void
81 {
82 $lockFilePath = $this->getLockFilePath($processName);
83 $this->lockFileHandles[$processName] = fopen($lockFilePath, 'w');
84 flock($this->lockFileHandles[$processName], LOCK_EX);
85 }
86
91 private function getLockFilePath($processName): string
92 {
93 $path = $this->lockFileStorage->getAbsolutePath();
94 return $path . '/' . $processName . '.lock';
95 }
96
100 private function releaseLock($processName): void
101 {
102 flock($this->lockFileHandles[$processName], LOCK_UN);
103 fclose($this->lockFileHandles[$processName]);
104 }
105}
__construct(ilAssQuestionProcessLockFileStorage $lockFileStorage)
ilAssQuestionProcessLockFileStorage $lockFileStorage
$path
Definition: ltiservices.php:30