JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
Fix db_get_value after mysql->mysqli upgrade
[wfpl.git] / mutex.php
1 <?php
2
3 function mutex_lock ($name, $duration) {
4         while (true) {
5                 $now = time();
6                 $deleted_obsoletes = false;
7                 db_insert('wfpl_mutexes', 'name,expires', $name, $now + $duration);
8                 $id = db_auto_id();
9                 $rows = db_get_assocs('wfpl_mutexes', 'id,name,expires', 'order by id');
10                 $first_match = true;
11                 foreach ($rows as $row) {
12                         if ($row['expires'] < $now) {
13                                 if (!$deleted_obsoletes) {
14                                         db_delete('wfpl_mutexes', 'where expires < %i', $now);
15                                         $deleted_obsoletes = true;
16                                 }
17                         } elseif ($row['name'] === $name) {
18                                 if ($row['id'] == $id) {
19                                         return $id;
20                                 } else {
21                                         break;
22                                 }
23                         }
24                 }
25                 # not first
26                 db_delete('wfpl_mutexes', 'where id=%i', $id);
27                 sleep(1);
28         }
29 }
30
31 function mutex_unlock ($id) {
32         db_delete('wfpl_mutexes', 'where id=%i', $id);
33 }