GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.

Lock::__construct()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 10
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 6
nc 2
nop 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Linio\Lock;
6
7
class Lock
8
{
9
    /**
10
     * Lock path. If not set, the system temporary directory is used.
11
     *
12
     * @var string
13
     */
14
    protected $path;
15
16
    /**
17
     * Lock name.
18
     *
19
     * @var string
20
     */
21
    protected $name;
22
23
    /**
24
     * @var Process
25
     */
26
    protected $process;
27
28
    /**
29
     * @param string $name
30
     * @param Process $process
31
     */
32
    public function __construct(string $name, Process $process = null)
33
    {
34
        $this->name = $name;
35
36
        if (!($process instanceof Process)) {
37
            $this->process = new Process();
38
        } else {
39
            $this->process = $process;
40
        }
41
    }
42
43
    /**
44
     * @return string
45
     */
46
    public function getPath(): string
47
    {
48
        if (empty($this->path)) {
49
            return sys_get_temp_dir();
50
        }
51
52
        return $this->path;
53
    }
54
55
    /**
56
     * @param string $path
57
     */
58
    public function setPath(string $path)
59
    {
60
        $this->path = $path;
61
    }
62
63
    /**
64
     * @return string
65
     */
66
    public function getName(): string
67
    {
68
        return $this->name;
69
    }
70
71
    /**
72
     * @return string
73
     */
74
    public function getFileName(): string
75
    {
76
        return $this->getPath() . DIRECTORY_SEPARATOR . $this->getName() . '.lock';
77
    }
78
79
    /**
80
     * @return bool
81
     */
82
    public function isLocked(): bool
83
    {
84
        $locked = file_exists($this->getFileName());
85
86
        if ($locked) {
87
            $pid = trim(file_get_contents($this->getFileName()));
88
89
            if (!$this->process->isApplicationProcess($pid)) {
90
                $this->release();
91
92
                return false;
93
            }
94
95
            return true;
96
        }
97
98
        return false;
99
    }
100
101
    /**
102
     * @throws LockException
103
     */
104
    public function acquire()
105
    {
106
        if (file_put_contents($this->getFileName(), getmypid()) === false) {
107
            throw new LockException('Lock file could not be created.');
108
        }
109
    }
110
111
    /**
112
     * @throws LockException
113
     */
114
    public function release()
115
    {
116
        if (!file_exists($this->getFileName())) {
117
            return;
118
        }
119
120
        if (!unlink($this->getFileName())) {
121
            throw new LockException('Lock file could not be removed.');
122
        }
123
    }
124
125
    /**
126
     * @throws LockException
127
     */
128
    public function forceRelease()
129
    {
130
        if (!$this->isLocked()) {
131
            return;
132
        }
133
134
        $pid = (int) trim(file_get_contents($this->getFileName()));
135
136
        if (!$this->process->isApplicationProcess($pid)) {
137
            $this->release();
138
139
            return;
140
        }
141
142
        if (!posix_kill($pid, SIGKILL)) {
143
            throw new LockException('Unable to kill the running process.');
144
        }
145
146
        $this->release();
147
    }
148
}
149