summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Lang <lang@cosmocode.de>2010-10-18 16:30:04 +0200
committerAdrian Lang <lang@cosmocode.de>2010-10-18 16:31:00 +0200
commit30b9fabab69e5f3d63eab09a96a9aa7c669b9f38 (patch)
treef87aee69cd3917a6d2d1c690529727ea1c6b8757
parent9208bd41ae8c41f3e5a2d993bf678f152b68b89c (diff)
downloadrpg-30b9fabab69e5f3d63eab09a96a9aa7c669b9f38.tar.gz
rpg-30b9fabab69e5f3d63eab09a96a9aa7c669b9f38.tar.bz2
Fix subscription locking
- use directories since working with them is atomic - delete stale locks after 5 minutes
-rw-r--r--inc/subscription.php25
1 files changed, 21 insertions, 4 deletions
diff --git a/inc/subscription.php b/inc/subscription.php
index f198402f9..78cb3ed0d 100644
--- a/inc/subscription.php
+++ b/inc/subscription.php
@@ -44,9 +44,26 @@ function subscription_filename($id) {
*
* @author Adrian Lang <lang@cosmocode.de>
*/
+function subscription_lock_filename ($id){
+ global $conf;
+ return $conf['lockdir'].'/_subscr_' . $id . '.lock';
+}
+
function subscription_lock($id) {
- $lockf = subscription_filename($id) . '.lock';
- return !file_exists($lockf) && touch($lockf);
+ // FIXME merge this with the indexer lock generation, abstract out
+ global $conf;
+ $lock = subscription_lock_filename($id);
+ while(!@mkdir($lock,$conf['dmode'])){
+ usleep(50);
+ if(time()-@filemtime($lock) > 60*5){
+ // looks like a stale lock - remove it
+ @rmdir($lock);
+ }else{
+ return false;
+ }
+ }
+ if($conf['dperm']) chmod($lock, $conf['dperm']);
+ return true;
}
/**
@@ -58,8 +75,8 @@ function subscription_lock($id) {
* @author Adrian Lang <lang@cosmocode.de>
*/
function subscription_unlock($id) {
- $lockf = subscription_filename($id) . '.lock';
- return file_exists($lockf) && unlink($lockf);
+ $lockf = subscription_lock_filename($id);
+ return @rmdir($lockf);
}
/**